zoukankan      html  css  js  c++  java
  • 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服务器会拒绝登录

  • 相关阅读:
    Flask基础01
    Django logging配置
    JSONP和CORS跨域
    Scrapy框架
    请求库之urllib,requests及工具selenium
    MongoDB安装
    Django 视图层
    Django REST framework 2
    WebSocket
    爬虫性能相关
  • 原文地址:https://www.cnblogs.com/alighie/p/7865883.html
Copyright © 2011-2022 走看看