遇到一个需求,需要在windows下把文件或者目录上传到linux服务器,
这个功能用putty自带的pscp工具可以实现,但是每次都要手工输入密码,比较麻烦。
因为我希望在脚本里写一个自动上传文件的命令,不需要输入密码.
按网上的办法修改了服务器的配置文件里的PasswordAuthentication为yes,并在运行pscp时加上-pw passwd参数,
仍然不行.最后根据
https://blog.csdn.net/ppdouble/article/details/21623547
的办法实验成功.
具体过程为
1.下载最新的putty工具,我用的是2020/06/27发布的0.74版
2.安装好之后,在putty的安装目录下有一个puttygen工具,用来生成ssh登录的公钥和秘钥.这是本次实验的核心
(1)双击puttygen工具,出现下面的窗口
(2)单击Generate按钮,然后在上部的空白区域移动鼠标,以便生成随机的秘钥。
(3) 1分钟出现下面的结果,单击save private key按钮,把私钥保存到windows机器上的ssh.ppk里.
(4)单击save public key按钮,把公钥存到一个文本文件1.txt里,保存后的文件的内容如下所示.
但是这个公钥还不能直接被ssh服务器识别.,必须进行修改.具体的修改办法请继续往后看.
(5)在刚才的公钥文件1.txt中删除第1行第2行和最后一行,
即删除开头的
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20210111"
和结尾的
---- END SSH2 PUBLIC KEY ----(包括这一行结尾的回车符)
(6)在文件的开头加上ssh-rsa 然后把剩下的行连接起来,即去掉所有的回车符.最后的效果如下
即文件只有一行2列,第一列为加密协议类型,第2列加密后的文本字符串,然后保存.
(7)想办法把修改好的1.txt的内容复制到linux服务器上的
/home/ubuntu/.ssh/authorized_keys这个文件的结尾.
authorized_keys的格式是一行一个公钥条目,ubuntu为实际的linux登录用户名.
(8)在windows的命令行中执行类似于下面的命令,ip要替换为服务器的实际地址.
ubuntu为第7步时的用户名
pscp -P 22 -i ssh.ppk 1.txt ubuntu@ip:/home/ubuntu/
执行会发现本机的1.txt就复制到了linux服务器的指定目录.
另外,如果是win10系统,则有更简便的办法.
(1)win10提供了一个简易的openssh软件,
安装办法为:
设置>>应用>>应用和功能>>管理可选功能>>添加功能 ,然后选择安装OpenSSH client.
安装好之后,如果命令行执行ssh命令成功就说明安装完毕.
(2)在命令行里执行ssh-keygen,生成本机的公钥和密钥对.
密码为空,执行后会提示公钥文件和私钥文件的存储路径.
对我的dell笔记本,公钥文件为C:\Users\DELL/.ssh/id_rsa.pub
(3)把刚才生成的id_rsa文件中的内容直接复制到
linux服务器上的 /home/ubuntu/.ssh/authorized_keys这个文件的结尾.不需要做任何改动.
(4)在windows下的命令行执行
scp 1.txt ubuntu@ip:/home/ubuntu/
执行成功,不需要输入密码了.
如果机器上没有openssh软件,可以从下面的地址下载,解压之后把解压后的目录加入到path 变量即可,不需要安装
https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.1.0.0p1-Beta/OpenSSH-Win64.zip