向 scp
(Secure Copy Protocol)传递密码并不是一个安全的做法,因为这样做会导致密码在网络中明文传输,容易被截获。为了安全地传输文件,建议使用以下方法:
首先,在本地生成一个 SSH 密钥对:
ssh-keygen -t rsa
这会生成一个公钥(id_rsa.pub
)和一个私钥(id_rsa
)。
将公钥复制到远程服务器的 ~/.ssh/authorized_keys
文件中:
ssh-copy-id user@remote_host
这会提示你输入远程服务器的密码,之后公钥就会被添加到 authorized_keys
文件中。
scp
传输文件现在你可以使用 scp
传输文件而无需输入密码:
scp local_file user@remote_host:/path/to/remote_directory
sshpass
如果你确实需要在不安全的环境中传递密码,可以使用 sshpass
工具。但请注意,这种方法不推荐用于生产环境。
sshpass
在某些系统上,sshpass
可能需要手动安装:
sudo apt-get install sshpass # Debian/Ubuntu
sudo yum install sshpass # CentOS/RHEL
sshpass
传递密码sshpass -p 'your_password' scp local_file user@remote_host:/path/to/remote_directory
expect
脚本expect
是一个自动化交互式应用程序的工具,可以用来自动输入密码。
expect
sudo apt-get install expect # Debian/Ubuntu
sudo yum install expect # CentOS/R甘草
expect
脚本创建一个脚本文件,例如 scp_with_password.exp
:
#!/usr/bin/expect -f
set timeout -1
set user [lindex $argv 0]
set password [lindex $argv 1]
set local_file [lindex $argv 2]
set remote_host [lindex $argv 3]
set remote_directory [lindex $argv 4]
spawn scp $local_file $user@$remote_host:$remote_directory
expect "password:"
send "$password\r"
expect eof
chmod +x scp_with_password.exp
./scp_with_password.exp user password local_file remote_host remote_directory
最安全和推荐的方法是使用公钥认证。如果你必须在某些情况下传递密码,可以考虑使用 sshpass
或 expect
,但请务必注意安全性问题。
云+社区沙龙online [新技术实践]
技术创作101训练营
腾讯技术创作特训营第二季第2期
“中小企业”在线学堂
中小企业数字化升级之 提效篇
高校公开课
高校公开课
领取专属 10元无门槛券
手把手带您无忧上云