为艺术而技术

SSH Key的那些事

October 14, 2020

最近公司服务器升级,各个系统都从RH5升级到RH7,所有的SSH key都要重新装一遍,否则之前那些scp,sftp都不工作了。中间遇到了各种事情,这里略微记录一下。

基本上,如果你需要拷贝文件到一个远程的服务器(uploading)或者从一个远程服务器上拷贝文件到本地(downloading),这个过程你不想每次都输入密码,那么你需要把你这个服务器上的public key安装到远程服务器上。这个就是一个典型的public/private key的应用,具体可以参考维基百科

  • cipher

当远程服务器已经从RH5升级到RH7,而本地服务器还是RH5的时候,就需要这样的参数了。 如下面所示:

/usr/bin/scp -c aes128-ctr ${remoteServer}/${remoteFile}.csv ${localFolder}/${localNamePart1}.${localNamePart2}.csv
  • StrictHostKeyChecking

当远程服务器的名字是一个集群名字而非某一个具体机器的时候,需要这个参数,如下所示:

/usr/bin/scp -o "StrictHostKeyChecking=no" ${localFolder}/${localNamePart0}.${localNamePart2}.csv ${remoteServer}/${remoteFile}.csv

另外一种方式就是在那个用户的.ssh目录下面创建一个config文件,文件内容如下:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

这样所有的命令都不需要再额外加参数了。

  • convert

如果要安装远程服务器的key但是提供的格式是SSH2的,而你需要的是OPENSSH的格式,可以使用下面的命令进行转换:

ssh-keygen -i -f ./xxx@xxx_prod.pub > ./xxx@xxx_prod_openssh.pub

具体请参考这里

  • sftp replace scp

即便有了如上措施,还有可能遇到那个账户只能使用sftp权限而不能使用scp的情况,这个时候你必须使用sftp来一步完成任务,而不是像通常那样进行来回交互。 具体分uploading和downloading两种情况:

downloading:

sftp {user}@{host}:{remoteFileName} {localFileName}

uploading:

sftp ${REMOTE_SERVER}${REMOTE_DIR} <<< $"put ${LOCAL_HOME}/data/input/${LOCAL_FILE}" 

要注意上面这个命令,后面只能用双引号,不能用单引号,因为引号里面有环境变量,双引号才会解释出来。

更多信息请阅读这里


Written by Qingfei Yuan who builds useful things.

© 2019 - 2020 yuanqingfei
Creative Commons License