如何让SSH从标准input接收密码

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

你不能使用大多数SSH客户端。 你可以通过使用SSH API来解决这个问题,比如用于Python的Paramiko 。 小心不要推翻所有安全策略。

基于这个职位你可以这样做:

创build一个使用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

创build一个脚本,返回你的密码(注意回声“回声

 $ 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,如果你存储你的用户,主机和密码在纯文本文件,你误导的工具创造一个可能的安全漏洞

你可以在官方的debian仓库中使用sshpass 。 例:

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

一个旧的职位复兴…

我find了这一个,同时寻找解决scheme完全相同的问题,我发现了一些东西,我希望有一天有人会发现它有用:

  1. 安装ssh-askpass程序(apt-get,yum …)
  2. 设置SSH_ASKPASSvariables( export SSH_ASKPASS=/usr/bin/ssh-askpass
  3. 从terminal打开一个新的SSH连接,没有一个未定义的TERMINALvariables( setsid ssh user@host

这看起来很简单,很安全,但没有检查(只在本地安全的情况下使用)。

我们到了。

我不确定你需要这个function的原因,但似乎你可以用ssh-keygen得到这个行为。

它允许您在不使用密码的情况下通过在您的计算机上拥有专用RSA密钥和服务器上的公共RSA密钥来login到服务器。

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

FreeBSD邮件列表推荐了期望的库。

如果你需要一个编程式的sshlogin,你确实应该使用公共密钥login ,但是显然这样做比使用外部库通过stdin传递密码要less很多。

提取这个答案留下一个简单而通用的脚本:

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

把它保存为pass ,做一个chmod +x pass ,然后像这样使用它:

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

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

ssh遇到SSH_ASKPASSDISPLAY集合时,它将启动由SSH_ASKPASS引用的程序, SSH_ASKPASS传递提示user@host's password: