如何让ssh从stdin接收密码

时间:2009-08-27 11:07:47

标签: ssh passwords stdin

如何让SSH从stdin读取密码,默认情况下不会这样做?

8 个答案:

答案 0 :(得分:17)

基于此post,你可以这样做:

使用 SSH_ASKPASS 创建一个打开ssh会话的命令(在man ssh上搜索SSH_ASKPASS)

$ cat > ssh_session <<EOF
export SSH_ASKPASS="/path/to/script_returning_pass"
setsid ssh "your_user"@"your_host"
EOF

注意:为避免ssh试图询问tty,我们使用setsid

创建一个返回密码的脚本(注意 echo“echo

$ echo "echo your_ssh_password" > /path/to/script_returning_pass

让它们可执行

$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass

试试吧

$ ./ssh_session

请记住,ssh代表安全shell,如果您将用户,主机和密码存储在纯文本文件中,则会误导该工具,从而造成可能的安全漏洞

答案 1 :(得分:13)

您可以使用sshpass,例如在官方debian repositories中。例如:

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server

答案 2 :(得分:9)

大多数SSH客户端都无法使用。您可以使用SSH API解决此问题,例如Python的Paramiko。注意不要否决所有安全策略。

答案 3 :(得分:4)

旧帖子复活......

我在找到完全相同的问题的解决方案时找到了这个,我发现了一些东西,我希望有一天会发现它有用:

  1. 安装 ssh-askpass 程序(apt-get,yum ...)
  2. 设置SSH_ASKPASS变量(export SSH_ASKPASS=/usr/bin/ssh-askpass
  3. 从终端打开一个新的ssh连接,没有未定义的TERMINAL变量(setsid ssh user@host
  4. 这看起来很简单,可以保证安全但尚未检查(仅在本地安全上下文中使用)。

    我们在这里。

答案 4 :(得分:3)

FreeBSD mailing list推荐expect库。

如果你需要一个程序化的ssh登录,你真的应该是using public key logins,但是 - 与使用外部库通过密码{{1}相比,这种方式显然有更少的安全漏洞}}

答案 5 :(得分:2)

我不确定您需要此功能的原因,但似乎您可以使用ssh-keygen获得此行为。

通过在计算机上安装专用RSA密钥和服务器上的公共RSA密钥,您可以在不使用密码的情况下登录服务器。

http://www.linuxproblem.org/art_9.html

答案 6 :(得分:2)

提取this answer会留下一个简单而通用的脚本:

#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@"

将其保存为pass,执行chmod +x pass,然后像这样使用它:

$ echo mypass | pass ssh user@host ...

如果它的第一个参数包含password:,那么它会将其输入传递给它的输出(cat),否则它会在将自己设置为SSH_ASKPASS程序后启动它。

ssh同时遇到SSH_ASKPASSDISPLAY时,它会启动SSH_ASKPASS引用的程序,并将提示符user@host's password:

答案 7 :(得分:0)

更好的sshpass替代方法是: https://github.com/clarkwang/passh

我遇到sshpass的问题,如果ssh服务器未添加到我的known_hosts sshpass不会显示任何消息,passh则没有此问题。 / p>