![自动输入SCP密码](https://linux22.com/image/159636/%E8%87%AA%E5%8A%A8%E8%BE%93%E5%85%A5SCP%E5%AF%86%E7%A0%81.png)
我将使 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
文件中,以便建立公钥认证连接。
如果仍然想使用密码,则可以制作期望脚本,如下所示,并更改期望脚本第二行以匹配您的user
和server
与MY_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/