无密码ssh远程机器

  1. 云栖社区>
  2. 博客>
  3. 正文

无密码ssh远程机器

余二五 2017-11-08 16:31:00 浏览1047
展开阅读全文

                                                           双台 无密码访问  A--->B--->A

第一步需要在服务器A生成密钥对,将生成的公钥上传到服务器B的相关用户目录下的.ssh目录中(没有的话手动创建,注意,它的目录权限是700)


第二步 并将公钥文件名称改为authorized_keys(注意,这个文件的权限应该是644),请注意.ssh目录及authorized_keys文件的权限,权限不符,会使配置无效

具体操作如下:


[root@mysqlcluster ~]# ssh-keygen -t rsa     之后一路回车

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory ‘/root/.ssh’.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

0e:4c:ec:e3:04:98:b0:71:00:91:75:57:ee:56:a1:82 root@mysqlcluster

执行上面一步,会在~/.ssh目录下生成两个文件id_rsa和id_rsa.pub, 

其中id_rsa是私钥,保存在本机;id_rsa.pub是公钥,是要上传到远程服务器的



2、上传公钥到需要无密码登陆的远程服务器B上并改名为authorized_keys:
远程服务器B上如果没有.ssh目录的话,先手动创建:
[root@www1bak ~]# mkdir .ssh
[root@www1bak ~]# chmod 700 .ssh

然后从服务器A上传公钥文件到远程服务器B:

[root@mysqlcluster ~]# scp .ssh/id_rsa.pub root@ip地址:/root/.ssh/authorized_keys


The authenticity of host ’192.168.15.234 (192.168.15.234)’ can’t be established.
RSA key fingerprint is c9:ef:0c:1b:ac:6c:ef:84:a4:a7:e5:d1:20:58:c8:73.
Are you sure you want to continue connecting (yes/no)? yes                              
Warning: Permanently added ’192.168.15.234′ (RSA) to the list of known hosts.  

  //这一步会将远程服务器B加入到本机(服务器A)的known_hosts列表中
root@192.168.15.234′s password:
id_rsa.pub                                                                                        100%  399     0.4KB/s   00:00

3、测试

上传完公钥文件到远程后,马上从服务器A登陆到服务器B,如果没有输入密码登陆到了服务器B,表示成功,如果还要输入密码,则请检查远程服务器B上的.ssh目录权限是否为700上传的远程服务器上的公钥名是否改为了authorized_keys,权限是否为600

 同理  B-------A  操作一样 :即在B机器上生成的公钥上传并追加到A机器的/root/.ssh/authorized_keys 文件中


这样 双台机器的root用户就可以互相无密码ssh了


                        多台机器相互无密码访问 A->B->C->A->C->B->A


1、在每台服务器上都执行ssh-keygen -t rsa生成密钥对:
#ssh-keygen -t rsa

2、在每台服务器上生成密钥对后,将公钥复制到需要无密码登陆的服务器上:在每台服务器生成密钥对后,在每台服务器上执行ssh-copy-id命令

#ssh-copy-id -i  ~/.ssh/id_rsa.pub root@ip1


#ssh-copy-id -i  ~/.ssh/id_rsa.pub root@ip2


以上命令,可以自动将公钥添加到名为authorized_keys的文件中,在每台服务器都执行完以上步骤后就可以实现多台服务器相互无密码登陆了


Linux系统里缺省都包含一个名为ssh-copy-id的工具:

# type ssh-copy-id

ssh-copy-id is /usr/bin/ssh-copy-id

你用cat或者more命令看一下就知道ssh-copy-id本身其实就是一个shell脚本,用法很简单:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server


ssh-copy-id有一个很要命的问题,那就是缺省它仅仅支持SSH运行在22端口的情况,不过实际上出于安全的需要,我们往往都会更改服务器的SSH端口,比如说改成10022端口,这时候你运行ssh-copy-id就会报错了,直接修改ssh-copy-id脚本当然可以修正这个问题,但是那样显得太生硬了,实际上还有更好的办法:

# vi ~/.ssh/config

加上内容:

Host server
Hostname ip
Port 10022

你也可以单独只加入Port一行配置,那样就是一个全局配置,保存后再运行ssh-copy-id命令就不会报错了。

补充:经网友提示,如果端口不是22,不修改config文件,按如下方式也可以:

ssh-copy-id -i ~/.ssh/id_rsa.pub “-p 10022 user@server



1.在服务器端(192.168.0.1)产生密钥
  [root@chanjet21 ~]# cd /root/.ssh/
  [root@chanjet21 .ssh]# ls
  known_hosts
  [root@chanjet21 .ssh]# ssh-keygen -t dsa
  Generating public/private dsa key pair.
  Enter file in which to save the key (/root/.ssh/id_dsa):
  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:
  Your identification has been saved in /root/.ssh/id_dsa.
  Your public key has been saved in /root/.ssh/id_dsa.pub.
  The key fingerprint is:
  26:67:d7:2c:27:8f:01:ea:a6:6c:34:d3:9d:04:ac:08 root@chanjet21
  [root@chanjet21 .ssh]# ls
  id_dsa  id_dsa.pub  known_hosts
  于是生成了id_dsa  id_dsa.pub两个文件。
  2. #cp id_sda.pub authorized_keys
  3.然后将。ssh文件夹拷贝覆盖各个节点间。ssh目录
  [root@chanjet21 .ssh]# scp -r /root/.ssh/ root@192.168.0.2:/root/
  [root@chanjet21 .ssh]# scp -r /root/.ssh/ root@192.168.0.3:/root/
  [root@chanjet21 .ssh]# scp -r /root/.ssh/ root@192.168.0.4:/root/
  此时便可从服务器端无需密码就可以登录到各个节点 




ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对



有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。

1.在A机下生成公钥/私钥对。

[chenlb@A ~]$ ssh-keygen -t rsa -P ''


-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车
它在/home/chenlb下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。

2.把A机下的id_rsa.pub复制到B机下,在B机的.ssh/authorized_keys文件里,我用scp复制。

[chenlb@A ~]$ scp .ssh/id_rsa.pub 用户名@ip地址:/home/id_rsa.pub 
chenlb@192.168.1.181's password:
id_rsa.pub                                    100%  223     0.2KB/s   00:00


由于还没有免密码登录的,所以要输入密码。

3.B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里。

[chenlb@B ~]$ cat id_rsa.pub >> .ssh/authorized_keys


[chenlb@B ~]$ chmod 600 .ssh/authorized_keys


authorized_keys的权限要是600

4.A机登录B机。

[chenlb@A ~]$ ssh 192.168.1.181
The authenticity of host '192.168.1.181 (192.168.1.181)' can't be established.
RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.181' (RSA) to the list of known hosts.
Last login: Thu Jul  3 09:53:18 2008 from chenlb
[chenlb@B ~]$





一、用ssh-keygen创建公钥

haifeng@haifeng-EX38-DS4:/$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/haifeng/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/haifeng/.ssh/id_rsa.
Your public key has been saved in /home/haifeng/.ssh/id_rsa.pub.
The key fingerprint is:
7b:75:98:eb:fd:13:ce:0f:c4:cf:2c:65:cc:73:70:53 haifeng@haifeng-EX38-DS4
The key's randomart image is:
+--[ RSA 2048]----+
|                E|
|                .|
|              ...|
|             + =.|
|        S   + +.*|
|         . . + Bo|
|        . . . = =|
|         . . . * |
|            . ..=|
+-----------------+

 

##输入后,会提示创建.ssh/id_rsa、id_rsa.pub的文件,其中第一个为密钥,第二个为公钥。过程中会要求输入密码,为了ssh访问过程无须密码,可以直接回车 。

2.查看钥匙。

[root@localhost .ssh]# ls ~/.ssh/
id_rsa  id_rsa.pub  known_hosts

###可以发现 ssh目录下的两枚钥匙。

3.将公钥即 id_rsa.pub复制到被管理机器上面

[root@localhost .ssh]# scp id_rsa.pub root@192.168.36.194:~/.ssh/authorized_keys
root@192.168.36.194's password: 
id_rsa.pub                                    100%  408     0.4KB/s   00:00


这是因为首次访问后,ssh会在.ssh/known_hosts中保存各个认证过的主机信息




1. 前期准备:

 检查是否安装了SSH服务和rsync服务(rsync是一个远程数据同步工具,可以通过LAN/WLAN快速同步多台主机之间的文件)

 rpm -qa | grep openssh 

 rpm -qa | grep rsync 

我的Centos 5.6下的显示:
  www.2cto.com  

 20130129111424714.png

如果没有安装则执行一下安装:

yum install ssh 

yum install rsync 

service sshd restart 启动服务
 

1. SSH无密码验证的原理

 Master作为客户端,要实现无密码公钥认证,连接到服务器Salve上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Salve上。当Master通过SSH链接到Salve上时,Salve会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Salve,Salve确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,期间不需要手工输入密码,重要的过程是将Master上产生的公钥复制到Salve上。
 

2. 实际操作过程

 3.1 Master实现无密码登录Salve

 1> 以root用户登录,更改SSH的配置文件

 vi /etc/ssh/sshd_config 

 20130129111424335.png

 RSAAuthentication yes # 启用 RSA 认证


 PubkeyAuthentication yes # 启用公钥私钥配对认证方式


 AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径


 重启SSH服务: service sshd restart 

 2> 以新建用户hadoop身份登录

 su - hadoop 

 ssh-keygen -t rsa 生成密钥文件,一切按默认的方式生成,密钥文件生成后默认存放位置为/home/hadoop(你的用户名)/.ssh

 20130129111424342.png

  查看生成文件: ll .ssh 下面的这两个即为生成的密钥对

 20130129111425430.png

  将id_rsa.pub加到授权的key里面去:cat id_rsa.pub >> authorized_keys 

 20130129111425237.png

 修改authorized_keys的权限,(这一步很重要不然的话,SSH时仍然需要密码)

 chmod 600 authorized_keys 

 20130129111426775.png

  查看本机是否可以SSH无需密码登录: ssh localhost 

 20130129111426105.png

  OK , 以上证明本机登录成功。 

  接下来要做的就是将Master的公钥id_rsa.pub复制到Salve上去,并加入到授权的key中。

 scp ~/.ssh/id_rsa.pub 目标机器

 20130129111426864.png

  由于首次登录还没有添加认证,这次仍然会提示输入密码

  以hadoop身份登录Salve节点(注意此前意见以root身份对ssh的配置进行修改,方式同上)

 20130129111426755.png

  确认文件存在

 如果不存在.ssh 则创建文件夹.ssh,并将权限修改为700,这一步非常重要因为默认创建的.ssh文件夹的权限为700,手工创建不修改权限的话不能成功,修改权限后将该 

  id_rsa.pub添加到授权的key中:

  (1) mkdir .ssh 

  (2) chmod 700 .ssh 

  (3)cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 

  (4)修改authorized_keys的权限为600          chmod 600 ~/.ssh/authorized_keys 

  进入Master节点,检查能否登录Salve节点:

 ssh 192.168.171.133

 20130129111426681.png

  OK , 在Master上无密码登录Salve成功

3.1.2 同样在Savle上生成密钥对,并添加到Master授权中,就可以实现相互无密码登录了。

 ssh-keygen -t rsa 

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

 scp ~/.ssh/id_rsa.pub hadoop@192.168.171.131:~/

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

 验证登录即可。

注意几点:  www.2cto.com  

  1> SSH的配置文件一定要修改,而且修改后要重启

  2> 认证文件一定要采用追加方式:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  3> authorized_keys文件的权限一定要修改为600

  4> .ssh的文件如果是手动创建的话权限一定要修改为700 


ssh-keyscan命令


使用ssh-keyscan命令可以 收集主机的公钥,帮助构建并验证 ssh_known_hosts 文件。

命令语法:

ssh-keyscan [选项] [主机|地址列表名称列表]

命令中各选项的含义如表所示。

                                  ssh-keyscan命令选项含义

选项

含义

-H

在输出中哈希所有主机名和地址

-p <端口号>

指定连接远程主机的端口号

-T<超时时间>

设置连接尝试的超时时间

-v

显示详细信息

-t <类型>

指定从扫描的主机获取密钥的类型。类型可以是rsadsa,默认值是rsa

 

:显示主机192.168.0.2RSA主机密钥。

[root@rhel ~]# ssh-keyscan 192.168.0.2

:显示主机192.168.0.2DSA主机密钥。

[root@rhel ~]# ssh-keyscan -t dsa 192.168.0.2










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1554387,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注