前言
在进行化学模拟计算的过程中,计算在远程服务器上进行,而分子建模和结果可视化一般在Windows系统上进行,这就意味着在本地机器和远程服务器上会存在频繁的文件传输。简单的文件传输方式能极大提高工作效率。目前我所了解的文件传输主要有以下几类:
psftp> help
! run a local command
bye finish your SFTP session
cd change your remote working directory
chmod change file permissions and modes
close finish your SFTP session but do not quit PSFTP
del delete files on the remote server
dir list remote files
exit finish your SFTP session
get download a file from the server to your local machine
help give help
lcd change local working directory
lpwd print local working directory
ls list remote files
mget download multiple files at once
mkdir create directories on the remote server
mput upload multiple files at once
mv move or rename file(s) on the remote server
open connect to a host
put upload a file from your local machine to the server
pwd print your remote working directory
quit finish your SFTP session
reget continue downloading files
ren move or rename file(s) on the remote server
reput continue uploading files
rm delete files on the remote server
rmdir remove directories on the remote server
C:\Users\EngzSinger>scp -help
unknown option -- h
usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program] source ... target
鼠标操作固然直观简单,但是不适用于批量操作,命令行操作显得繁琐,最好能把大量重复的操作写入脚本,鼠标一点即开始上传下载。
文件传输脚本
- 这里选用
scp命令为例
scp的主体命令为scp source target,如果是上传操作,那么这里的source即为本地文件的路径,target即为远程服务器中目标文件夹;如果是下载操作,则正好相反。
假设我的服务器ip为192.168.213.58,我的登陆账号是engzsinger账户下/home/engzsinger/FTP_DOWN目录中有文件toDown,想要下载到本地D:\datafile\desktop\文件夹下,则打开命令行窗口运行一下命令:
scp zxwu@192.168.213.58:/home/engzsinger/FTP_DOWN/toDown D:\datafile\desktop\
- 为了实现脚本操作,将上述命令写成
.bat文件,以后双击脚本文件就能实现文件下载。将服务器上的~/FTP_DOWN/文件夹设置为下载文件夹,用来存放需要下载的文件,用本地电脑上的G:\datafile\desktop\DOWN\文件夹存放下载下来的文件。
为了避免重复下载,还需要在下载完成后删除~/FTP_DOWN/中的文件。编写的scpdown.bat内容如下:
@echo off
echo off
scp engzsinger@192.168.213.58:/home/engzsinger/FTP_DOWN/* G:\datafile\desktop\DOWN\
ssh engzsinger@192.168.213.58 rm /home/engzsinger/FTP_DOWN/*
免密访问
上面的脚本其实还忽略了一个重要问题,那就是身份验证,通常登陆服务器是需要密码的,传输文件自然也少不了,在运行上述脚本后,命令行窗口会弹出提示输入密码。
engzsinger@192..168.213.58' s password:
那每次都需要输入密码来完成文件传输过程,这个脚本就变得毫无意义。
有问题就有办法
ssh连接支持采用rsa2免密登陆,为解决这个问题提供可能。
生成rsa密钥对
[engzsinger@master ~]$ ssh-keygen -t rsa -P ""
# -P "" 表示指定密码,设置密钥的目的就是为了不输密码,所以这里设置为空,即免密
Generating public/private rsa key pair.
Enter file in which to save the key (/home/engzsinger/.ssh/id_rsa):
/home/engzsinger/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Your identification has been saved in /home/engzsinger/.ssh/id_rsa.
Your public key has been saved in /home/engzsinger/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:P/OYbvHIwn4rD5lINA0yR96V1GCQj5Cuq5xicGV8mxo engzsinger@master
The key's randomart image is:
+---[RSA 2048]----+
| o.+..+=+ |
| =o+.o. . |
| . .+.oo |
| +.o.. . |
| o o.oS |
|. . E.o. +. |
|.. +..+.++ |
|.o .o +.=*. |
|..+. ..B*.. |
+----[SHA256]-----+
[engzsinger@master ~]$
上述操作生成rsa类型密钥对,包括公钥id_rsa.pub和私钥id_rsa,顾名思义,公钥是可以公开给大家看的,私钥是不能泄漏的,需要妥善保管。
公钥写入许可名单
生成密钥对后,想要无密登陆目标机器,还得把本机的公钥写入目标机器中的authrized_keys文件中,该文件应该存放在.ssh/文件夹中,但是不会默认存在,需要人为的生成。
现将本机的公钥文件上传到服务器,存放在该账户的主目录下。运行命令
cat id_rsa.pub >> .ssh/authrized_keys
# 注意id_rsa.pub 是本地上传的文件
这样就能实现免密登陆,传输文件也不需要频繁输入密码。
可能的问题
如果完成了以上步骤,还不能进行免密连接,就要联系管理员
查看/etc/ssh/sshd_config文件中是否存在一下内容
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如果不存在或者内容被注释掉,就可能导致免密失败。
本文介绍了如何使用RSA密钥实现Linux服务器的免密登录和文件传输脚本自动化。首先,通过生成RSA密钥对并将其公钥写入服务器的authorized_keys文件中,实现无密码登录。然后,创建脚本实现文件的批量上传和下载,并在下载后自动删除服务器上的文件。最后,提到了如果遇到免密登录问题,应检查ssh配置文件。

1988

被折叠的 条评论
为什么被折叠?



