路漫漫其修远兮
吾将上下而求索

ssh互信和初始化设置

1、机器互信

设置三台机器互信:192.168.175.11,192.168.175.12,192.168.175.13

即每台机器都能无密码登录另外的一台服务器,执行命令,

在主机:192.168.175.11
[root@abc ~]#ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:
55:b9:07:84:47:b3:37:6c:55:61:9c:1b:f1:cf:93:55 root@abc
The key's randomart image is:
+--[ RSA 2048]----+
|           +=..+E|
|          ..++.=o|
|          ...o= =|
|         .  .o.++|
|        S    . oo|
|                .|
|                 |
|                 |
|                 |
+-----------------+

[root@abc ~]#ssh-copy-id root@192.168.175.12
[root@abc ~]#ssh-copy-id root@192.168.175.13

[root@abc ~]#ssh root@192.168.175.12 "mkdir /tmp/bbb"
[root@abc ~]#ssh root@192.168.175.13 "mkdir /tmp/bbb"

有的机器会报错,需要使用命令:ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 22 rsync@192.168.175.13"

这样,主机:192.168.175.11就可以在12,13上面执行命令

同样在12上生成私钥,传到11,13机器上面

同样在13上生成私钥,传到11,12机器上面

这样,三台机器都可以互相在其他机器上面操作而不输入密码

2、常用的登录设置

1、修改默认的登录端口

2、修改防火墙配置

3、修改root密码

4、禁止root登录,采用普通用户登录系统,然后切换到root账号上面

5、禁止使用密码登录,全部使用公钥

6、设置普通用户使用公钥登录到服务器

7、使用无密码su – 提权到root权限上面

———————————————————————-

上面的操作都在实际情况下操作,假设操作的机器是在远程,无法接触到物理机,因此下面的操作一定要谨慎,操作的步骤一定不能出错,不然会出现自己连接不上远程服务器的悲剧

假设需要操作的机器有公网IP,可以直接连接,不用通过DNAT方式连接内网的机器

1、修改默认端口,先修改配置文件,默认端口是22号端口,假如要修改为2222号端口,先增加一个端口为2222,原有的22号端口也保留。以防新的修改出问题,导致连接不上,假如只有2222号端口,修改完成后断电了,重启,就连不上了,任何时候,都要确保有一个能够正常工作,等另外一个能正常工作后才能将现有的通道切除

[root@localhost ~]#vim /etc/ssh/sshd_config 
Port 22
Port 2222
 
[root@localhost ~]#service sshd reload
Reloading sshd:                                            [  OK  ]

2、设置防火墙增加端口,然后重载配置

[root@localhost ~]#vim /etc/sysconfig/iptables
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT

[root@localhost ~]#service iptables start
iptables: Applying firewall rules:                         [  OK  ]

3、然后用另一个终端连接,确保能在2222号端口连接上

4、设置sshd配置文件,删除原有的22号端口

[root@localhost ~]#vim /etc/ssh/sshd_config
Port 2222

[root@localhost ~]#service sshd reload
Reloading sshd:                                            [  OK  ]
[root@localhost ~]#ss -tnl
State       Recv-Q Send-Q                                                   Local Address:Port                                                  
 
LISTEN      0      128                                                :::2222 
LISTEN      0      128                                                *:2222

重载后查看22号端口已经不再监听,但是原有的通过22号端口访问的ssh依旧可以正常工作, 只是新的终端必须用2222号端口了

5、删除防火墙里面的22号端口,重载配置文件

[root@localhost ~]#vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT

[root@localhost ~]#service iptables reload
iptables: Trying to reload firewall rules:                 [  OK  ]

因为终端和服务器的连接状态是ESTABLISHED ,所以原有的22号端口的终端依旧可以正常工作

6、下面的操作不涉及到防火墙,操作步骤是先添加普通用户,确保可以通过普通用户使用公钥登录到机器,并且能su – 到root正常操作后,再修改root密码,禁止root登录,任何时候,都要确保有一个能够正常工作,等另外一个能正常工作后才能将现有的通道切除

7、添加普通用户并设置密码,设置复杂些,保存,一般不用这个密码

[root@localhost ~]#useradd admin
[root@localhost ~]#id admin
uid=501(admin) gid=501(admin) groups=501(admin)
[root@localhost ~]#passwd admin
Changing password for user admin.
New password: qwerty
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.

8、切换到普通用户生成公私钥对

[root@localhost ~]#su - admin
[admin@localhost ~]$ll -a
total 28
drwx------  4 admin admin 4096 May 14 18:58 .
drwxr-xr-x. 4 root  root  4096 May 14 18:58 ..
-rw-r--r--  1 admin admin   18 May 11  2016 .bash_logout
-rw-r--r--  1 admin admin  176 May 11  2016 .bash_profile
-rw-r--r--  1 admin admin  124 May 11  2016 .bashrc
drwxr-xr-x  2 admin admin 4096 Nov 12  2010 .gnome2
drwxr-xr-x  4 admin admin 4096 Jul 21  2016 .mozilla
[admin@localhost ~]$ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa): 
Created directory '/home/admin/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.
The key fingerprint is:
e2:f3:e3:6a:52:39:02:95:95:b5:8f:1d:5f:f1:d5:66 admin@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|     o.o.     . o|
|    o .  .     oE|
|   .    . .   .o.|
|  .      + o .   |
|   .  ..S o .    |
|    ..+.         |
|     oo.         |
|    . .o.        |
|     o.oo.       |
+-----------------+

[admin@localhost ~]$cd .ssh/
[admin@localhost ~/.ssh]$ls
id_rsa  id_rsa.pub
[admin@localhost ~/.ssh]$ll
total 8
-rw------- 1 admin admin 1675 May 14 19:03 id_rsa
-rw-r--r-- 1 admin admin  409 May 14 19:03 id_rsa.pub

9、将生成的公钥复制为文件:authorized_keys,因为使用终端使用私钥登录这台机器,然后将生成的私钥传到windows上面,保密保存

[admin@localhost ~/.ssh]$cp id_rsa.pub authorized_keys
[admin@localhost ~/.ssh]$ll
total 12
-rw-r--r-- 1 admin admin  409 May 14 19:05 authorized_keys
-rw------- 1 admin admin 1675 May 14 19:03 id_rsa
-rw-r--r-- 1 admin admin  409 May 14 19:03 id_rsa.pub
[admin@localhost ~/.ssh]$sz id_rsa

10、使用xshell私钥登录

image.png

使用普通用户登录,点击浏览,找到刚才的私钥文件

image.png

然后就可以登录到admin用户了

11、继续在刚才的root终端下操作,设置admin用户su – 到root用户免密码

[root@localhost ~]#sed -i 's@.*trust use_uid$@auth       sufficient  pam_wheel.so trust use_uid@'  /etc/pam.d/su
[root@localhost ~]#cat /etc/pam.d/su    #将第四行的注释去掉
#%PAM-1.0
auth		sufficient	pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
auth		sufficient	pam_wheel.so trust use_uid

[root@localhost ~]#gpasswd -a admin wheel    #将admin用户添加到wheel组里面

12、在终端配置,意思是用户登录后,会自动执行这里面的命令,避免每一次登录都要手动su到root上面

image.png

最后达到的效果,每次会自动无密码切换到root上面

image.png

13、到这里,这条通道就成功的建立了,可以修改原来的root配置了,首先修改root密码

[root@localhost ~]#echo "redhat----" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.

14、设置sshd的配置文件

通常情况下我们在连接 OpenSSH服务器的时候假如 UseDNS选项是打开的话,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态 IP不会有PTR记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接 OpenSSH 服务器的速度。 

GSSAPI 主要是基于 Kerberos 的,因此要解决这个问题也就变成要系统配置有 Kerberos, 一般用户是没有配置 Kerberos的,反正我是没见过这种方式 SSH 登录的。 所以那就直接把 SSH 服务端的 GSSAPIAuthentication 直接关掉吧,客户端也可以关掉。

[root@localhost ~]#sed -i 's@.*GSSAPIAuthentication.*@GSSAPIAuthentication no@'  /etc/ssh/sshd_config    #会
[root@localhost ~]#
[root@localhost ~]#sed -i 's@.*UseDNS.*@UseDNS no@'  /etc/ssh/sshd_config
[root@localhost ~]#
[root@localhost ~]#sed -i 's@^#PermitRootLogin.*@PermitRootLogin no@'  /etc/ssh/sshd_config
[root@localhost ~]#
[root@localhost ~]#sed -i 's@^PasswordAuthentication.*@PasswordAuthentication no@'  /etc/ssh/sshd_config

[root@localhost ~]#service sshd reload
Reloading sshd:                                            [  OK  ]

15、到这里就设置完成了,root用户禁止登录,也禁止使用密码登录,只能使用admin使用公钥登录到服务器,然后su – 到root上面进行操作

注意:禁止root登录会影响使用在root用户下scp命令,rsync使用ssh加密的功能,但是可以使用普通用户来进行这些操作,普通用户不影响。


注意:禁止远程root登录后,要想传数据到远程主机,可以在远程主机添加一个普通用户,然后:scp  tmp1.sh bob@1.1.1.1:/home/bob  类似于这种传数据到远程主机,但是要注意远程目录要添加的普通用户要有写权限

远程主机添加用户后最好切换到该用户操作创建.ssh目录,添加:authorized_keys文件,以防使用root权限创建后,bob用户对该目录无法操作

经测试:centos6.5远程机器创建的用户,即使添加了authorized_keys,本地主机依然不能通过公钥传输文件到远程主机,必须给远程主机的该用户添加密码,才可以通过公钥传输文件到该用户

centos6.8可以在远程机器创建用户,添加了authorized_key,不用创建密码就可以通过公钥传输文件到该用户


如果公钥传输过去后,一直需要输入密码,可能的问题

一个常犯的错误是文件权限不对。$HOME只能自己可写 (0755 或者 0750),

.ssh设置成 0700,authorized_keys和id_rsa.pub 0644, id_rsa和authorized_keys 0600

或者使用:ssh-copy-id root@192.168.175.13   可以自动解决上面的权限问题




未经允许不得转载:江哥架构师笔记 » ssh互信和初始化设置

分享到:更多 ()

评论 抢沙发

评论前必须登录!