免密码从windows复制文件到linux
有时候,我们需要使用编码的方式将文件从Windows系统发送到Linux系统上,这篇文章将记录如何实现这一过程。
一个实际的例子是:现有的程序运行在Windows服务器上,需要将一些文件传输到运行在Linux的Hive数据仓库中。也许有更好的方案可以直接传给Hive,但一种间接的方案是先把文件发到Linux上,然后在Linux上使用load data读入到Hive中。
下载并安装putty
Putty不仅可以作为连接linux系统的客户端,也提供了一个叫做pscp.exe的工具,用于将文件从windows直接拷贝至Linux系统。如果没有安装putty,先前往putty官网下载并安装:https://www.putty.org
使用pscp传输文件
在Windows系统上,Putty的默认安装目录位于:C:\Program Files\PuTTY。打开cmd命令行工具,使用cd命令,进入到该目录下。然后,在D盘根目录创建一个hello.txt文件,尝试将该文件发送至 linux上的 /root/downloads文件夹下。
C:\Program Files\PuTTY>pscp D:\hello.txt root@192.168.1.56:/root/downloads root@192.168.1.56's password: hello.txt | 0 kB | 0.0 kB/s | ETA: 00:00:00 | 100%
因为还没有配置授权密钥,所以此时仍需要输入密码,这个密码输入是没有回显的,正确输入root密码后,可以看到传输已经成功了。
生成客户端密钥
其实使用pscp传文件的认证模式和ssh是一致的,建议先看下这篇文章:linux上配置ssh实现免密登录。
现在使用Putty自带的另一个工具,puttygen,来生成密钥对。该工具也位于C:\Program Files\PuTTY文件夹下。
选择RSA,然后点击Generate。接下来晃动鼠标,以鼠标位置作为随机数来来生成Key。
保存私钥
在对话框中点击“save private key”,命名为key.ppk,并保存至D:\根目录下。
复制公钥
复制对话框上面文本框的公钥,然后执行下面的语句,将公钥加至Linux系统的authorized_keys文件中:
# echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAkOCtqdeNszoEszhJvO9WMBsydQ12GQMsMtjD/VBgWl8JilwanfMrjH55SA3YBuw9Dtmy+epMl9fcuoCOMFbYq3sxmKHwft2x9m+g0chPDioeL9Mgscrx+1hbJQokVbS7xnWc2uKrTYcMvs+x2KsFoT5YTEdCbRGXhaTWt0e1y3gUNyNH1AbWlH1m9Rwvg8BICuNcqP/Qd5NtktOoFzO3EBSrKdUrNuIiQX3eYJ62d3nomKmjPr6/Bcx47VqQK+b7eU1Ywmz7SGow9FZpBOPxVJiA6GC87eksH4wxXhGB2cp+d88t29az5f+vsbDbsSGCSHxrbkKtolFBnONQNpUqKw== rsa-key-20180725" >> ~/.ssh/authorized_keys
再次复制文件
再次执行pscp,使用-i标记指定刚才生成的私钥位置,就可以成功复制文件到linux系统了。
C:\Program Files\PuTTY>pscp -i D:\key.ppk D:\hello.txt root@192.168.1.56:/root/downloads hello.txt | 0 kB | 0.0 kB/s | ETA: 00:00:00 | 100%
这样,通过命令行发送文件到linux就成功了,接下来当需要使用编程的方式来发送时。可以启动一个cmd命令行进程,再将上面的语句发送过去执行就可以了。
感谢阅读,希望这篇文章能给你带来帮助!