我目前正在使用这个命令。我在另一台机器上(ip1)
scp file.txt root@ip2:/home/praveen/test.c /home/praveen
该命令将提示输入密码。
我在一些 shell 脚本中使用它,并从一些 crontab 文件调用这些脚本。所以,我不能每次都输入密码。有什么方法可以禁用密码询问或其他方式从某处输入密码,这样我就不需要再次输入密码。
我不能使用ssh-keygen
,因为我必须只对这些脚本执行操作。当我使用时ssh-keygen
,它永远不会再次提示我输入密码。我不想要这个。其余的事情应该照常进行。
答案1
目前尚不清楚为什么您无法使用ssh-keygen
以及随后的密钥交换。我相信这是推荐的做法。
另一种方法是使用expect
命令 (在线手册页)。这可以消除交互过程中的用户干预。顾名思义,它需要一个提示,并按照指定的方式做出相应的响应。
看看这个解决方案使用自动化 SSHexpect
。引用几行:
# Look for passwod prompt expect "*?assword:*" # Send password aka $password send -- "$password\r"
第二行指定出现的提示。在这种情况下,它要求输入密码。第四行将密码发送到服务器。
答案2
如果远程服务器允许,您可以使用 ftp。这是我用于此目的的 shell 脚本示例
HOST='remote.server.com'
USER='domainname/usrid'
PASSWD='p@@ssw0rd'
cd /path/to/local/directory/containing/the/file/to/be/transferred
`ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /diretory/on/remote/server
put file2transfer.dat
bye
quit
END_SCRIPT`
答案3
由于没有人发布实际答案。
是的,如评论中所述。您需要创建公钥/私钥对。
这里有2本手册:
然后,您可以利用ssh-agent
将密钥加载到内存中,这样您就不必输入为密钥指定的密码 - 因为它们存储在当前会话的内存中。您不必首先设置密码,但我建议您这样做,因为持有您私钥的人可能会使用它来危害您。
当然,您可以随后删除密钥或从~/.ssh/authorized_keys
远程主机上删除您的公钥。然后他会再次提示你输入密码。
答案4
一个简单的解决方案是:
echo "password" | scp -r myfile user@remotehost:/home/user/destination