Linux之间建立信任,即无密码传输文件

Posted Alighieri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之间建立信任,即无密码传输文件相关的知识,希望对你有一定的参考价值。

1、基本场景

基本场景是想从一台Server服务器直接登录另一台,或者将Server服务器的数据不需密码验证直接拷贝至Client服务器,以下我们简称Server服务器为S(待发送的数据文件在这台服务器上),Client服务为C,信任关系的最简单操作方法如下:

2、步骤

 

2.1 S服务器上,进入当前用户根目录下的隐藏目录 .ssh,命令如下

cd ~/.ssh

(注:目录名前的点好”.”表示该文件夹是一个特殊的隐藏文件夹,ls命令下默认是看不到的,通过 ls –a 命令观察到)

2.2 生成S服务器的私钥和公钥:

ssh-keygen -t rsa

 

ssh-keygen生成密钥用于信任关系生成

-此时会显示Generating public/private key pair. 并提示生成的公钥私钥文件的存放路径和文件名,默认是放在 /home/username/.ssh/id_rsa 这样的文件里的,通常不用改,回车就可以

然后Enter passphrase(empty for nopassphrase): 通常直接回车,默认不需要口令

Entersame passphrase again: 也直接回车

然后会显式密钥fingerprint生成好的提示,并给出一个RSA加密协议的方框图形。此时在.ssh目录下ls,就可以看到生成好的私钥文件id_rsa和公钥文件id_rsa.pub了

2.3Server服务器上加载私钥文件

仍然在.ssh目录下,执行命令:

ssh-add id_rsa

系统如果提示:Identity added: id_rsa (id_rsa) 就表明加载成功了

下面有几个异常情况处理:

–如果系统提示:could not open a connection to your authentication agent

则需要执行一下命令: 

ssh-agent bash

然后再执行上述的ssh-add id_rsa命令

–如果系统提示id_rsa: No such file or directory

这是系统无法找到私钥文件id_rsa,需要看看当前路径是不是不在.ssh目录,或者私钥文件改了名字,例如如果建立的时候改成 aa_rsa,则这边命令中也需要相应改一下

-如果系统提示 command not found,那肯定是你命令敲错字符了

-提示Agent admitted failure to sign using the key,私钥没有加载成功,重试ssh-add

-注意id_rsa/id_rsa.pub文件不要删除,存放在.ssh目录下

2.4 把公钥拷贝至Client服务器上

很简单,例如 scp id_rsa.pub user@10.11.xx.xx:~/.ssh

2.5修改Client服务器文件 

ssh登录到Client服务器上,然后在Client服务器上,把公钥的内容追加到authorized_keys文件末尾(这个文件也在隐藏文件夹.ssh下,没有的话可以建立,没有关系)

cat id_rsa.pub >> ~/.ssh/authorized_keys

 

以下是各种补充说明,遇到问题时可以参考

 

注1:这里不推荐用文件覆盖的方式,有些教程直接scp id_rsa.pub 到Client服务器的authorized_keys文件,会导致之前建的其他信任关系的数据被破坏,追加到末尾是更稳妥的方式;

注2: cat 完以后,Client服务器上刚才拷贝过来的id_rsa.pub文件就不需要了,可以删除或移动到其它地方)

注3:ssh-keygen 命令通过-b参数可以指定生成的密钥文件的长度,如果不指定则默认为1024,如果ssh-keygen –b 4096(最长4096),则加密程度提高,但是生成和验证时间会增加。对一般的应用来说,默认长度已经足够胜任了。如果是rsa加密方式,那么最短长度为768byte

注4:authorized_keys文件的权限问题。如果按上述步骤建立关系后,仍然要验证密码,并且没有其他报错,那么需要检查一下authorized_keys文件的权限,需要作下修改: chmod g-w authorized_keys

OK,现在试试在Server端拷贝一个文件到Client服务器,应该无需交互直接就传过去了。 

但是此时从Client传数据到Server服务器,仍然是需要密码验证的。如果需要两台服务器间能直接互传数据,则反过来按上述步骤操作一下就可以了

 

3.各种可能遇到的情况和处理方法

–提示 port 22: Connection refused

 

可能的原因:没有正确安装最新的openssh-server,安装方法如下

 

sudo apt-get install openssh-server

 

不支持apt安装的,可以手工下载:

 

wget http://ftp.ssh.com/pub/ssh/ssh-3.2.9.1.tar.gz       

–关于目录和文件的权限设置

.ssh目录的权限必须是700,同时本机的私钥的权限必须设置成600:

chmod 600 id_rsa

 

否则ssh服务器会拒绝登录

 

以上是关于Linux之间建立信任,即无密码传输文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux下用SCP无需输入密码传输文件

WIndows与Linux之间传输文件

Linux两台主机之间建立信任

SCP实现无需密码传输文件

如何在虚拟机上的Linux系统配置FTP服务,跟Windows建立连接传输文件

如何使用xftp工具在Windows与Linux之间传输文件