gpt4 book ai didi

bash - 在shell脚本中自动回答ssh-copy-id

转载 作者:行者123 更新时间:2023-12-02 14:20:07 30 4
gpt4 key购买 nike

我正在写一个shell脚本,我想使用 ssh-copy-id 自动登录到远程计算机,因此在打印时手动进行:

ssh-copy-id -i /root/.ssh/id_rsa $2@$4 -p $3 | echo $1

$ 1代表 密码
$ 2表示 用户名
$ 3指向 端口,和
$ 4是指 ip
没关系,问题是我必须在之后自动插入密码:
ssh-copy-id -i /root/.ssh/id_rsa $2@$4 -p $3

我添加了这个“ | printf $ 1 ”,但是它不起作用,它在屏幕上显示“ password:”,仍然等待密码..
我希望你能理解我并谢谢你。

最佳答案

正如@Leon所指出的,您的管道是反向的。但是,即使您按正确的顺序进行操作,也仍然无法使用,因为ssh-copy-id(以及openssh中的所有其他程序)不会从stdin中读取密码。解决方案是使用$SSH_ASKPASS环境变量。您可以执行以下操作:首先,创建一个辅助脚本,说/var/tmp/ssh-pass.sh(实际上找到比它更好的名称),其内容如下:

#!/bin/sh                                                                    
echo "$PASS"

然后,您可以使用以下命令完成所需的操作:
PASS="$1" SSH_ASKPASS="/var/tmp/ssh-pass.sh" setsid -w ssh-copy-id -i /root/.ssh/id_rsa "$2"@"$4" -p "$3"

说明:我们使用 setsid -wssh-copy-id进程与当前使用的终端解除关联。这将强制 ssh-copy-id运行 $SSH_ASKPASS中指定的可执行文件以获得密码。我们在该变量中指定了自己的脚本,因此 ssh-copy-id将仅执行该脚本。现在,该脚本应该通过将密码打印到其stdout来提供 ssh-copy-id的密码。我们使用 $PASS变量作为脚本的密码,因此脚本只打印该变量。

关于bash - 在shell脚本中自动回答ssh-copy-id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275038/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com