使用scp通过ssh拷贝文件到远程服务器

scp app_list.jsp ***@***:/opt/www/***/

命令是非常简单的, 问题在于怎么省略掉输入密码的步骤, 这就需要用到 sshpass

sshpass -p "****" scp -r ****@*****:/****/app_list.jsp ./app_list.jsp

那么问题来了, mac默认并没有安装sshpass, 通过brew安装, brew提示, sshpass太容易带来ssh安全问题了, 所以他们没有收纳, 那就只能手动安装了。

因为其是一个开源项目,所以直接下载源码:

curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz && tar xvzf sshpass-1.05.tar.gz

This will create a directory called ‘sshpass-1.05’, open this directory in your terminal and run the following commands. This will configure, compile and install the sshpass program.

./configure
make
sudo make install

这时候运行 sshpass -V

如果显示正常的版本信息就说明安装成功, 就可以尽情享受其带来的便利了, 不过注意安全问题哦。

但是正如brew所说,这样的做法是存在问题的, 所以我们通过使用ssh的公钥,私钥来换种思路解决这个问题:

使用ssh的私钥,公钥来避免scp拷贝文件需要输入密码的问题

首先补课: https://wiki.archlinux.org/index.php/SSH_Keys_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

推荐有能力的同学阅读英文原本

补充说明: ssh生成的私钥,公钥文件, 其实都是文本文件, 真实生效的是其内容, 纯文本内容, 所以如果想在服务器上存放多个公钥, 只需要修改authorized_keys, 将某一个公钥,粘贴进authorized_keys文件即可, 多个公钥之间,使用换行符分割。 注意, 服务器的公钥一定是 authorized_keys 这个文件。