我可以使用 -i 选项通过 SSH 连接到服务器来指定私钥:
ssh -i ~/.ssh/id_dsa user@hostname
我正在创建一个id_dsa
从数据库中获取文本的脚本,但我不确定如何将该字符串提供给 SSH。我需要类似的东西:
ssh --option $STRING user@hostname
其中$STRING
包含 的值id_dsa
。我需要知道--option
是否有一个。
尝试以下操作:
echo $KEY | ssh -i /dev/stdin username@host command
该键不会出现在 PS 语句中,但由于 stdin 被重定向,它仅对单个命令或隧道有用。
没有这样的开关——因为它会泄露敏感信息。如果有的话,任何人都可以通过执行一个简单的命令来获取您的私钥。ps
编辑:(因为在评论中添加了详细信息)
您确实应该将密钥存储到临时文件中。如果您不使用类似命令mktemp
创建临时文件,请确保在写入文件之前正确设置权限。
确保您运行代理(或 OpenSSH 的代理)进程并使用<whatever command you use to fetch it form the database> | ssh-add -
将加密密钥作为字符串传递是不可取的,但为了这个问题,我会说我遇到了同样的情况,我需要在脚本中将密钥作为字符串传递。我也可以使用存储在文件中的密钥,但脚本的本质是使其非常灵活,包含本身的所有内容是一项要求。所以我曾经分配变量并传递它并按如下方式回显它:
#!/bin/bash
KEY="${ YOUR SSH KEY HERE INSIDE }"
echo "${KEY}" | ssh -q -i /dev/stdin username@IP 'hostnamectl'
exit 0
注意:
-q
禁止所有警告
顺便说一句,上面脚本中的捕获点,因为我们使用 echo 它会打印再次不推荐的 ssh 密钥,以隐藏您可以使用 grep grep 一些肯定不会打印但仍然stdin
会有的东西回声的值。所以最终的cmd可以修改如下:
#!/bin/bash
KEY="${ YOUR SSH KEY HERE INSIDE }"
echo "${KEY}" | grep -qw "less" | ssh -q -i /dev/stdin username@IP 'hostnamectl'
exit 0
这对我有用。