如何让ssh从stdin接收密码

ola*_*ndo 23 passwords ssh stdin

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

alb*_*fan 18

基于这篇文章你可以做到:

创建一个使用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
Run Code Online (Sandbox Code Playgroud)

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

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

$ echo "echo your_ssh_password" > /path/to/script_returning_pass
Run Code Online (Sandbox Code Playgroud)

让它们可执行

$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass
Run Code Online (Sandbox Code Playgroud)

试试吧

$ ./ssh_session
Run Code Online (Sandbox Code Playgroud)

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

  • 另一个要求是必须设置DISPLAY.如果你正在运行X,你将不会注意到.如果你不是,你会的.要使ssh_script更具可移植性,请添加:export DISPLAY; DISPLAY =假 (2认同)

ste*_*fen 13

您可以使用sshpass,例如在官方debian存储库中.例:

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
Run Code Online (Sandbox Code Playgroud)

  • Homebrew (macOS) 已经禁止它:(“我们不会添加 sshpass,因为它让 SSH 新手用户很容易破坏 SSH 的安全性。” (2认同)

pvo*_*ten 9

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

  • 它不应该起作用,因为这会激发初级sysadmins使用在脚本逻辑中纠缠在一起的SSH密码来编写脚本。在用于网络和系统管理的环境中,一方面需要对安全敏感的信息与另一方面使事情做好之间进行明确区分。密码认证还不够安全。由于ssh在sysadmin上下文中广泛使用,因此尝试使用户远离仅使用密码的安全性是一个好主意。 (2认同)

小智 5

旧帖又复活了……

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

  1. 安装ssh-askpass程序(apt-get、yum ...)
  2. 设置SSH_ASKPASS变量 ( export SSH_ASKPASS=/usr/bin/ssh-askpass)
  3. 从终端打开一个新的 ssh 连接,没有未定义的 TERMINAL 变量 ( setsid ssh user@host)

这看起来很简单,很安全,但尚未检查(仅在本地安全上下文中使用)。

我们到了。


sta*_*fry 5

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

#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@"
Run Code Online (Sandbox Code Playgroud)

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

$ echo mypass | pass ssh user@host ...
Run Code Online (Sandbox Code Playgroud)

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

当同时ssh遇到SSH_ASKPASSANDDISPLAY集合时,它会启动 引用的程序SSH_ASKPASS,并传递给它提示user@host's password: