自动输入SCP密码

自动输入SCP密码

我将使 scp 出现在 cronjob 上,所以我宁愿使用自动输入其他服务器的密码。

sshpass -p 'your_password' scp [email protected]:/usr/etc/Output/*.txt /usr/abc/

这个脚本对我不起作用,我使用的是 Solaris。

还请注明对答案的解释。谢谢。

额外的

我用了

#!/usr/local/bin/expect -f

spawn bash -c "scp /apps/DASHBOARD/xx/xxx/xxxx/TEST1.*.txt dash@MYSERV:/apps/DASHBOARD/xx/xxx1/"
expect "*Password:*"
send "pass123\r"
interact

spawn bash -c "scp /apps/DASHBOARD/xx/xxx/xxxx/SAMP1.*.txt* dash@MYSERV:/apps/DASHBOARD/xx/samp1/"
expect "*Password:*"
send "pass123\r"
interact

我把它放在我的 CRONJOB 上。如果我手动运行此脚本,此脚本对我有用,但当我在 CRONJOB 上设置此脚本时,它不会在第二个 scp 上继续。

请帮忙。

答案1

使用公钥身份验证连接以避免保留/维护硬拷贝密码。将本地用户内容复制id_rsa.pub到远程用户~/.ssh/authorized_keys文件中,以便建立公钥认证连接。

如果仍然想使用密码,则可以制作期望脚本,如下所示,并更改期望脚本第二行以匹配您的userserverMY_PASSWORD您的密码:

spawn scp "[email protected]:/usr/etc/Output/*.txt" /usr/abc/
expect "[email protected]\'s password:" 
send "MY_PASSWORD\r"
interact

感谢 @pynexj 发帖链接到 StackOverFlow我必须将脚本修改如下:

#!/usr/bin/expect -f

spawn scp /TEST1.txt [email protected]:/root/
expect "*assword:*"
send "password\r"
expect eof

spawn scp /TEST2.txt [email protected]:/root/
expect "*assword:*"
send "password\r"
expect eof
exit

笔记如果您有多个文件或模式需要传输,您也可以考虑使用批处理模式的 SFTP 并期待。

答案2

如果您允许在硬盘上保密,您可以使用 home .ssh 文件夹中的密钥来跳过密码验证。这就是非交互式、机器对机器的身份验证方式。

答案3

在尝试之前,您需要在 scp 中使用正则表达式引用,因此这很可能是您的失败点。

sshpass -p 'your_password' scp "[email protected]:/usr/etc/Output/*.txt" /usr/abc/

相关内容