我正在尝试自动从主帐户到其他从帐户的无密码 ssh 设置。我有一个名为的脚本AddSSH.ksh
来执行此设置。当手动运行此脚本时,它会同时要求相同的密码,它基本上使用 scp 复制密钥。所有从属帐户都保存在一个文件中env.txt
。所以现在,我有一个 shell 脚本(run.ksh
),它从这个文件()中读取帐户env.txt
,然后使用expect
脚本auto_ssh.ksh
来处理交互并相应地输入密码。
环境.txt
account1@machine1
account2@machine2
account3@machine3
account4@machine4
运行.ksh:
#!/usr/bin/ksh
while read env
do
username=`echo $env | cut -d"@" -f1`;
hostname=`echo $env | cut -d"@" -f2`;
password='Unix_11'
ssh -n -o PasswordAuthentication=no ${env} ' ' 2>/dev/null
if [ $? -eq 0 ]; then
printf "\nConnection OK for : $env \n"
else
expect auto_ssh.ksh $username $hostname $password
fi
done<env.txt
auto_ssh.ksh:
#!expect
set timeout 6
set user [lindex $argv 0]
set machine [lindex $argv 1]
set password [lindex $argv 2]
spawn AddSSH.ksh $user $machine
expect "password:"
send "$password\r";
expect "password:"
send "$password\r";
interact
auto_ssh.ksh
如果像这样运行脚本
./auto_ssh.ksh account1 machine1 password
它运行良好,但是当我在 shell 脚本中调用它时,这个期望脚本在第二个密码处退出。当我在调试模式下运行 shell 脚本时,我看到它没有第二次发送密码,而是从读取下一个 envenv.txt
并退出。
这是调试模式下失败的输出行。
account1@machine1's password: + read env