在bash中,如何为后台进程命令输入密码?

Ric*_*Ong 5 linux bash nohup

我正在尝试从dreamhost到另一台主机进行rsync备份,这是我想要使用的命令:

nohup rsync -e"/ usr/bin/ssh"--bwlimit = 2000 -av username@server.dreamhost.com:remote_directory local_directory&

我希望这个过程能够在后台继续运行,即使我断开连接也是如此.问题是,我不知道如何在后台进程时输入密码.我该怎么做呢?

phs*_*phs 8

通常这是通过完全不需要密码来完成的.相反,请考虑将SSH配置为使用公钥.有几种在线资源(例如来自dreamhost的这些资源)可以帮助您实现这一目标.


hek*_*mgl 6

我会用一把钥匙.如果您需要使用密码保护密钥,或者因任何原因无法使用密钥,请使用expect来传递密码:

rsync_auto.sh:

#/bin/bash

expect <<<EOF
spawn nohup rsync -e "/usr/bin/ssh" --bwlimit=2000 -av username@server.dreamhost.com:remote_directory
expect "password:"
send "your_password\r"
expect eof
EOF
Run Code Online (Sandbox Code Playgroud)

!!!确保除了你以外没有人可以访问该文件!!!:

chmod 500 rsync_auto.sh
Run Code Online (Sandbox Code Playgroud)

稍微详细一点的方法可能是将密码存储在密钥环应用程序中,例如gnome-keyring,而不是将它们存储在普通文件中.如果你有兴趣,我发现了这篇文章.

  • 并意识到谁能读到这个文件,谁就能读到密码。 (2认同)