Linux下几种不同服务器间使用scp远程拷贝避免手动输入密码的解决方案

前言

  scp是 secure copy的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
  使用scp需要从服务上已经安装openssh-server。(A -> B或者A<-B,这里都把A称作主服务器,B称做从服务器)
Ubuntu:
  查看是否安装:dpkg -l | grep openssh-server
  安    装:sudo apt-get install openssh-server
CentOS:
  查看是否安装:rpm -qa | grep openssh-server
  安    装:yum install openssh-server
  
  下面介绍几种避免手动输入密码的解决方案。

方案一:服务器间建立SSH信任关系

1、在主服务器上执行ssh-keygen -t rsa,一直回车就好,不要输入密码,执行完成会在~/.ssh目录下生成id_rsa私钥和id_rsa.pub公钥文件,如下图:




2、执行scp -r ~/.ssh/id_rsa.pub user@ip:~/.ssh/tmp,输入从服务器用户密码后将主服务器的公钥拷贝到从服务;

3、从服务器上执行ls ~/.ssh/authorized_keys判断文件是否存在,不存在则执行touch ~/.ssh/authorized_keys创建,然后执行cat ~/.ssh/tmp >> ~/.ssh/authorized_keys将主服务器公钥追加到从服务器的authorized_keys里面

现在可以在直接在主服务器上拷贝文件到从服务器(scp -r xxx user@ip:dir/xxx)或者从从服务器上拷贝文件到主服务器上(scp -r user@ip:dir/xxx xxx),而不需要密码了。

方案二:使用sshpass工具来自动输入密码

  有时候从服务器上的authorized_keys我们是没办法修改的,这时候就没办法使用方案一来使另个服务器之间建立信任关系了。这种情况下我们可以选择使用sshpass工具来完成ssh连接时密码的自动输入。
  首先我们需要在主服务上安装sshpass工具

Ubuntu: 
查看是否安装:dpkg -l | grep sshpass 
安    装:sudo apt-get install sshpass
CentOS: 
查看是否安装:rpm -qa | grep sshpass 
安    装:yum install sshpass 

  安装完成后,就可以使用sshpass -p pwd scp xxx user@ip:xxx直接拷贝文件了。

方案三:使用expect脚本来自动输入密码

  expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。
  首先安装expect脚本:

Ubuntu: 
查看是否安装:dpkg -l | grep expect 
安    装:sudo apt-get install tcl tk expect
CentOS: 
查看是否安装:rpm -qa | grep expect 
安    装:yum install tcl tk expect

  安装完脚本后touch expect_scp创建文件后写入下面内容

#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp $src_file $username@$host:$dest_file
expect {
    "(yes/no)?"
    {
        send "yes\n"
        expect "*assword:" { send "$password\n"}
    }
    "*assword:"
    {
        send "$password\n"
    }
}
expect "100%"
expect eof

  保存后,chmod +x expect_scp赋予可执行权限。然后执行命令”./expect_scp ip user pwd 主服务文件 从服务器文件” 即可直接复制。

注:关于expect部分详细请参考《shell结合expect写的批量scp脚本工具

  另外对于IP地址是第一次使用的情况会询问,需要手动点击回车,可通过添加参数使用命令scp -o “StrictHostKeyChecking no” xxx xxx解决。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值