如何使从文件的ssh-添加读取密码?(How to make ssh-add read passph

2019-07-02 10:19发布

我想加入关键ssh-agent和希望ssh-add使用文件读取密码。 如何其可能的?

如何自动从shell脚本这个过程?

Answer 1:

根据您的分布和版本的ssh-添加您可能能够或不使用-p SSH-添加的选项,以这种方式从标准输入读取密码:

cat passfile | ssh-add -p keyfile

如果不工作,你可以使用期望 ,一个Unix工具,使交互式应用程序是非交互式的。 你必须从你的包管理器安装。

你在期待我写了一个工具。 在名为SSH加通文件中的内容复制并在其上(设置可执行权限chmod +x ssh-add-pass )。 你也可以将它复制到/ usr / bin中或/ usr / local / bin目录是从$ PATH搜索访问。

#!/bin/bash

if [ $# -ne 2 ] ; then
  echo "Usage: ssh-add-pass keyfile passfile"
  exit 1
fi

eval $(ssh-agent)
pass=$(cat $2)

expect << EOF
  spawn ssh-add $1
  expect "Enter passphrase"
  send "$pass\r"
  expect eof
EOF

用法很简单: ssh-add-pass keyfile passfile



Answer 2:

下面是一些解决方法系统不支持-p

$ PASS="my_passphrase"
$ install -vm700 <(echo "echo $PASS") "$PWD/ps.sh"
$ cat id_rsa | SSH_ASKPASS="$PWD/ps.sh" ssh-add - && rm -v "$PWD/ps.sh"

其中ps.sh基本上是你的脚本打印您的密码。 请参阅: man ssh-add

为了使它更安全(不保持在同一个文件),使用mktemp生成一个随机的私人文件,使其可执行( chmod ),并确保它打印密码到标准输出执行一次。



Answer 3:

类似于kenorb答案,但不保存秘密档案:

$ SSH_ASKPASS=/path/to/ssh_give_pass.sh ssh-add $KEYFILE <<< "$KEYPASS"

其中ssh_give_pass.sh是:

#!/bin/bash
# Parameter $1 passed to the script is the prompt text
# READ Secret from STDIN and echo it
read SECRET
echo $SECRET

如果你有在$ KEYPASSFILE秘密,它读入一个变量先用

KEYPASS=`cat $KEYPASSFILE`

另外,还要确保ssh_give_pass.sh不被未经授权的用户可编辑的 - 这将是很容易通过登录脚本通过了所有的秘密。



文章来源: How to make ssh-add read passphrase from a file?
标签: ssh ssh-agent