SCP 和/或 SSH 命令,密码一致

SCP 和/或 SSH 命令,密码一致

首先,我尝试使用 rsa 密钥,因为我正在使用脚本创建 RSA 密钥,但最初我必须连接到远程计算机以传递新生成的身份验证密钥。我正在做的事情是拥有预制钥匙,但我想要一种更简单的方法来获取所有这些机器的钥匙。

所以事情是这样的:我需要连接到 100 多台机器并传递公钥文件以及设置权限并打开密钥身份验证。现在我可以用两行来完成:一条用于传输的 scp 命令和一条用于设置权限并重新打开密钥身份验证的 ssh 命令。但事实上,它会为每台机器询问两次密码。由于有 100 多台机器需要这些密钥,所以我再也不用输入密码了,我不想输入这个密码 200 次。

我需要某种方法在连接过程中插入密码,就这一次(技术上是两次)。我希望能够在脚本运行时将密码存储在变量中,然后在建立连接并将公钥传输到所有这些计算机后完成它。

想法?

编辑:忘了提及,我无法安装任何东西。所以我不能使用expect。

答案1

您不需要建立两个连接来完成您正在做的事情。假设ssh-copy-id对你不起作用,这里是我很久以前(在我知道 ssh-copy-id 之前)编写的一个脚本中的一些内容,它在一个 ssh 中完成了它:

tar c $keys | ssh "$1" "set -e; cd \`mktemp -d\`; tar x; mkdir -p ~/.ssh; chmod go-w ~/.ssh; cat $keys >> ~/.ssh/authorized_keys; chmod go-w ~/.ssh/authorized_keys"

是的,这是一条巨大的线。$keys保存所有公钥的名称(记住,这是一个旧脚本):

keys=''
for k in identity.pub id_rsa.pub id_dsa.pub; do
        [ -e ~/.ssh/$k ] && keys="$keys $k"
done

关键是 ssh 是一种二进制安全传输,因此您可以使用它来传输 tar,以便在运行 chmod 等的同一会话中传输文件。

相关内容