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.3在Server服务器上加载私钥文件
仍然在.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之间建立信任,即无密码传输文件的主要内容,如果未能解决你的问题,请参考以下文章