如何让SSH从stdin读取密码,默认情况下不会这样做?
答案 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)
旧帖子复活......
我在找到完全相同的问题的解决方案时找到了这个,我发现了一些东西,我希望有一天会发现它有用:
SSH_ASKPASS
变量(export SSH_ASKPASS=/usr/bin/ssh-askpass
)setsid ssh user@host
)这看起来很简单,可以保证安全但尚未检查(仅在本地安全上下文中使用)。
我们在这里。
答案 4 :(得分:3)
FreeBSD mailing list推荐expect库。
如果你需要一个程序化的ssh登录,你真的应该是using public key logins,但是 - 与使用外部库通过密码{{1}相比,这种方式显然有更少的安全漏洞}}
答案 5 :(得分:2)
我不确定您需要此功能的原因,但似乎您可以使用ssh-keygen获得此行为。
通过在计算机上安装专用RSA密钥和服务器上的公共RSA密钥,您可以在不使用密码的情况下登录服务器。
答案 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_ASKPASS
和DISPLAY
时,它会启动SSH_ASKPASS
引用的程序,并将提示符user@host's password:
答案 7 :(得分:0)
更好的sshpass
替代方法是:
https://github.com/clarkwang/passh
我遇到sshpass
的问题,如果ssh服务器未添加到我的known_hosts
sshpass
不会显示任何消息,passh
则没有此问题。 / p>