authorized_keys文件的权限必须是600html
######################################node
对于linux运维工做者而言,使用ssh远程远程服务器是再熟悉不过的了!对于ssh的一些严格设置也关系到服务器的安全维护,今天在此,就本人工做中使用ssh的经验而言,作一些总结记录来下。linux
-bash: ssh: command not found
解决办法;
yum install -y openssh-server openssh-clinets算法
(0)ssh登陆时提示:Read from socket failed: Connection reset by peer.
尝试了不少解决方案均无效,无奈!卸载sshd,而后从新安装
# yum remove openssh*
# rm -rf /etc/ssh*
# yum install -y openssh*
# systemctl start sshd.servicedocker
(1)ssh远程登录后的提示信息,标题信息
咱们常常会使用中控机ssh信任跳转到其余机器上,可是不知道有没有运维朋友注意到ssh跳转成功后的终端显示的提示信息?
这些提示信息,是为了方便咱们在第一时间知道ssh跳转到哪台目标机上,也是为了不长期频繁跳转后因为大意形成的误入机器操做的风险,咱们一般会在ssh跳转到目标机器后显示一些提示信息,在一些国家, 登入给定系统前, 给出未经受权或者用户监视警告信息, 将会受到法律的保护.以下:
[root@bastion-IDC ~]# ssh -p22 192.168.1.15
Last login: Fri Jul 15 13:26:53 2016 from 124.65.197.154
===================================
|||||||||||||||||||||||||||||||||||
===================================
HOSTNAME: monit-server
IPADDRES: 192.168.1.15
===================================
IDC监控机
===================================shell
那么上面红色区域的提醒信息是在哪设置的呢?
作法一:其实很简单,这些信息是在目标机器的/etc/motd文件里自定义的
[root@monit-server ~]# cat /etc/motd
===================================
|||||||||||||||||||||||||||||||||||
===================================
HOSTNAME: monit-server
IPADDRES: 192.168.1.15
===================================
IDC监控机
===================================vim
作法二:在目标机器的/etc/ssh/sshd_config文件里定义,而后重启sshd服务便可。这两种作法是一致的效果!
Banner /etc/sshfilecentos
[root@host-192-168-1-117 ~]# cat /etc/sshfile
this is 192.168.1.117api
远程登录:
[root@linux-node2 ~]# ssh 192.168.1.117
this is 192.168.1.117
[root@host-192-168-1-117 ~]#缓存
(2)实现SSH无密码登陆:使用ssh-keygen和ssh-copy-id
ssh-keygen 产生公钥与私钥对.
ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的/home/username/.ssh和~/.ssh/authorized_keys的权利.
操做记录:
1)第一步:在本地机器上使用ssh-keygen产生公钥私钥对
#ssh-keygen -t rsa //一路默认回车
这样就会在当前用户家目录下的.ssh目录里产生公钥和私钥文件:id_rsa.pub、id_rsa。能够将id_rsa.pub公钥文件复制成authorized_keys
2)第二步:能够手动将本机的id_rsa.pub公钥文件内容复制到远程目标机的.ssh/authorized_keys文件中,能够就能够实现ssh无密码登录。
固然,也能够在本机直接使用ssh-copy-id将公钥复制到远程机器中
#ssh-copy-id -i /root/.ssh/id_rsa.pub user@ip [把本机的公钥拷贝到远程机器上,好比B机器]
也能够不加公钥路径,会默认加上
#ssh-copy-id user@ip
注意:
ssh-copy-id 将key写到远程机器的 ~/ .ssh/authorized_key.文件(文件会自动建立)中
1
2
|
对于非22端口(好比22222)状况下的
ssh
-copy-
id
的使用,须要这样用:
ssh
-copy-
id
-i
/root/
.
ssh
/id_rsa
.pub
'-p 22222 root@192.168.18.18'
|
3)这样,本机登陆到上面远程机器(B机器)就不用输入密码
#ssh user@ip
(3)ssh登陆失败,报错:Pseudo-terminal will not be allocated because stdin
现象:
须要登陆线上的一台目标机器A,可是不能直接登陆(没有登陆权限),须要先登陆B机器,而后从B机器跳转到A机器。
脚本以下:
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh root@101.201.114.106 "ssh -p25791 root@103.10.86.7"
可是在执行脚本的时候报错以下:
Pseudo-terminal will not be allocated because stdin
缘由:
伪终端将没法分配,由于标准输入不是终端。
解决办法:
须要增长-t -t参数来强制伪终端分配,即便标准输入不是终端。
在脚本里添加-t -t参数便可,以下:
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh root@101.201.114.106 "ssh -t -t -p25791 root@103.10.86.7"
或者
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh -t root@101.201.114.106 "ssh -t -t -p25791 root@103.10.86.7"
(4)ssh远程登录缓慢问题
解决办法:
编译/etc/ssh/sshd_config配置文件:
UseDNS no
GSSAPIAuthentication no
而后重启sshd服务便可!
(5)ssh登陆出现:permission denied(publickey.gssapi-with-mic)
解决方法:
修改/etc/ssh/sshd-config文件,将其中的:
PermitRootLogin no修改成yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉
PasswordAuthentication no修改成yes
最后重启sshd服务便可!
(6)ssh链接错误问题
1)在使用ssh或scp或rsync远程链接的时候,出现以下报错:
Address **** maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
解决方法:
修改本机ssh_config文件
[root@kvmserver ~]# vim /etc/ssh/ssh_config
GSSAPIAuthentication no
[root@kvmserver ~]#/etc/init.d/sshd restart
问题迎刃而解~~
2)本机scp、rsync命令都已具有,可是在使用scp或rsync远程同步的时候报错:
bash: scp: command not found
bash: rsync: command not found
缘由:是因为远程机器上没有安装scp或rsync形成的!安装这两个命令便可~
yum install openssh-clients
yum install rsync
3)远程ssh链接时错误“ The X11 forwarding request was rejected!”
解决方法:
将sshd_config中 设置 X11Forwarding yes
重启sshd服务。
(7)ssh链接超时被踢出问题解决
当使用xshell,SecureCRT等客户端访问linux服务器,有时候会出现终端按期超时被踢出的状况。
下面介绍三种方法来防止超时被踢出的方法,后两种状况的设置方法以及经过设置shell变量来达到此目的的方法:
一、 配置服务器
#vi /etc/ssh/sshd_config
1)找到 ClientAliveInterval参数,若是没有就本身加一行
数值是秒,好比你设置为120 ,则是2分钟
ClientAliveInterval 120
2)ClientAliveCountMax
指若是发现客户端没有响应,则判断一次超时,这个参数设置容许超时的次数。如3 、5等自定义
修改两项参数后以下:
----------------------------
ClientAliveInterval 120
ClientAliveCountMax 3 //0 不容许超时次数
修改/etc/ssh/sshd_config文件,将 ClientAliveInterval 0和ClientAliveCountMax 3的注释符号去掉,将ClientAliveInterval对应的0改为60,没有就本身输入。
ClientAliveInterval指定了服务器端向客户端请求消息 的时间间隔, 默认是0, 不发送.而ClientAliveInterval 60表示每分钟发送一次, 而后客户端响应, 这样就保持长链接了.ClientAliveCountMax, 使用默认值3便可.ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到必定值, 就自动断开. 正常状况下, 客户端不会不响应.
从新加载sshd服务。退出客户端,再次登录便可验证。
3)重启sshd service
sudo /etc/init.d/ssh restart
二、 配置客户端
#vim /etc/ssh/ssh_config
而后找到里面的
ServerAliveInterval
参数,若是没有你一样本身加一个就行了
参数意义相同,都是秒数,好比5分钟等
ServerAliveInterval 300
三、echo export TMOUT=1000000 >> /root/.bash_profile; source .bash_profile
在Linux 终端的shell环境中经过设置环境变量TMOUT来阻止超时。若是显示空白,表示没有设置, 等于使用默认值0, 通常状况下应该是不超时. 若是大于0, 能够在如/etc/profile之类文件中设置它为0.
(8)ssh远程登录,公钥受权不经过:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
公司IDC机房服务器,以前作了跳板机环境,其余机器只容许从跳板机ssh无密码信任过去,而且在信任关系作好后,禁用了其余机器的密码登录功能(sshd_config文件里设置“PermitEmptyPasswords no”)
后来跳板机出现了问题,打算重装这台机器,重装前取消了其余机器里只容许跳板机ssh信任关系,而且恢复了密码登录功能:
[root@bastion-IDC ssh]# vim /etc/ssh/sshd_config
PermitEmptyPasswords yes
[root@bastion-IDC ssh]# service sshd restart
修改后,当时在其余机器间是能够ssh相互登录,当时没在乎,觉得一切ok了。
但是,到了次日,再次ssh登录时,尼玛,竟然报错了~~
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
最后发现是selinux惹的祸!关闭它便可。
1)临时关闭selinux
[root@bastion-IDC ssh]# setenforce 0
[root@bastion-IDC ssh]# getenforce
Permissive
2)永久关闭
[root@bastion-IDC ssh]# vim /etc/sysconfig/selinux
SELINUX=disabled
[root@bastion-IDC ssh]# reboot #重启系统才能生效
说明:
1)ssh可同时支持publickey和password两种受权方式,publickey默认不开启,须要配置为yes。
若是客户端不存在.ssh/id_rsa,则使用password受权;存在则使用publickey受权;若是publickey受权失败,依然会继续使用password受权。
2)GSSAPI身份验证.
GSSAPIAuthentication 是否容许使用基于 GSSAPI 的用户认证.默认值为"no".仅用于SSH-2.
GSSAPICleanupCredentials 是否在用户退出登陆后自动销毁用户凭证缓存。默认值是"yes".仅用于SSH-2.
须要特别注意的是:
GSSAPI是公共安全事务应用程序接口(GSS-API)
公共安全事务应用程序接口以一种统一的模式为使用者提供安全事务,因为它支持最基本的机制和技术,因此保证不一样的应用环境下的可移植性.
该规范定义了GSS-API事务和基本元素,并独立于基本的机制和程序设计语言环境,并借助于其它相关的文档规范实现.
若是咱们在服务端打开GSSAPIAuthentication配置项,以下:
[root@server ~]#vim /etc/ssh/sshd_config
........
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
那么在客户端登陆服务端会用gssapi-keyex,gssapi-with-mic进行身份校验,一样客户端也要支持这种身份验证,以下:
[root@client ~]#vim /etc/ssh/ssh_config
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
咱们在客户端链接SSH服务端,以下:
ssh -v 192.168.1.11
.................
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
咱们看到以下的信息:
debug1: Unspecified GSS failure. Minor code may provide more information
No credentials cache found
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
说明SSH登陆时采用GSSAPI的方式进行身份验证,但咱们的系统不支持.
最后若是咱们不用这种方式进行身份验证的话,建议关闭这个选项,这样能够提升验证时的速度.
(9)ssh自定义安全设置
1)为了ssh登录的时候加一层保护,能够修改默认端口。修改ssh服务配置文件/etc/ssh/sshd_config
port 2222
这样远程链接时加短裤
#ssh 192.168.1.83 -p 2222
2)ssh使用时加-l后面跟用户名,表示登录到对方的这个用户下面。
#ssh -l wangshibo 192.168.1.83 -p 2222
等同于
#ssh wangshibo@192.168.1.83 -p 2222
3)限制ssh登录的来源ip,白名单设置(hosts.allow优先级最高,具体参考:Linux服务器安全登陆设置记录)
一是经过iptables设置ssh端口的白名单,以下设置只容许192.168.1.0/24网段的客户机能够远程链接本机
#vim /etc/sysconfig/iptables
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
二是经过/etc/hosts.allow里面进行限制(以下),/etc/hosts.deny文件不要任何内容编辑,保持默认!
#vim /etc/hosts.allow
sshd:192.168.1.*,192.168.9.*,124.65.197.154,61.148.60.42,103.10.86.7:allow
sshd:all:deny
4)仅容许特定的用户经过SSH登录
如不容许root用户登陆;
只容许几个指定的用户登陆(好比wangshibo、guohuihui、liuxing用户)
禁止某些指定的用户登陆(好比zhangda,liqin用户)
可是要注意:设置的这几个用户必须同时存在于本机和对方机器上
修改ssh服务配置文件/etc/ssh/sshd_config
PermitRootLogin no //将yes修改成no
AllowUsers wangshibo guohuihui liuxing //这个参数AllowUsers若是不存在,须要手动建立,用户之间空格隔开
DenyUsers zhagnda liqin //这个参数DenyUsers若是不存在,须要手动建立,用户之间空格隔开
也能够设置仅容许某个组的成员经过ssh访问主机。
AllowGroups wheel ops
实例说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
1)只容许指定用户进行登陆(白名单):
在
/etc/ssh/sshd_config
配置文件中设置 AllowUsers 选项。格式以下:
AllowUsers root grace kevin app
表示只容许grace用户、kevin用户经过
ssh
登陆本机。
AllowUsers root@192.168.10.10 app@192.168.10.11 kevin@192.168.10.13
表示只容许从192.168.10.10登陆的root用户、从192.168.10.11登陆的app用户、从192.168.10.13登陆的kevin用户能够经过
ssh
登陆本机。
2)只拒绝指定用户进行登陆(黑名单):)
在
/etc/ssh/sshd_config
配置文件中设置DenyUsers选项。格式以下:
DenyUsers wangbo linan zhangyang
表示拒绝wangbo、linan和zhangyang用户经过
ssh
登陆本机。
须要注意的是:
- AllowUsers、DenyUsers跟后面的配置之间使用TAB键进行隔开
- 多个百名单或黑名单之间使用空格隔开
例子:
[root@Centos6 ~]
# cat /etc/ssh/sshd_config
.......
AllowUsers root@192.168.10.202 app@192.168.10.200 kevin@192.168.10.202
[root@Centos6 ~]
# /etc/init.d/sshd restart
[root@Centos6 ~]
# cat /etc/ssh/sshd_config
.......
AllowUsers root app kevin
[root@Centos6 ~]
# /etc/init.d/sshd restart
[root@Centos6 ~]
# cat /etc/ssh/sshd_config
.......
DenyUsers wangbo linan zhangyang
[root@Centos6 ~]
# /etc/init.d/sshd restart
以下,因为已经容许了app和root登陆,则后面针对root@192.168.10.202和app@192.168.10.200的限制就无效了(二者别放在一块儿配置)
[root@Centos6 ~]
# cat /etc/ssh/sshd_config
.......
AllowUsers app root root@192.168.10.202 app@192.168.10.200
[root@Centos6 ~]
# /etc/init.d/sshd restart
|
================================================================
除了上面的方法能够限制ssh指定用户登陆外,还可使用pam规则进行设置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
1)容许指定的用户(好比kevin、grace帐号)进行登陆
在
/etc/pam
.d
/sshd
文件第一行加入,必定要在第一行,由于规则是自上而下进行匹配的。
auth required pam_listfile.so item=user sense=allow
file
=
/etc/sshusers
onerr=fail
而后在
/etc
下创建sshusers文件,编辑这个文件,加入你容许使用
ssh
服务的用户名,不用从新启动sshd服务。
最后重启sshd服务便可!
操做以下:
[root@docker-test1 ~]
# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_listfile.so item=user sense=allow
file
=
/etc/sshusers
onerr=fail
........
[root@docker-test1 ~]
# touch /etc/sshusers
[root@docker-test1 ~]
# vim /etc/sshusers
kevin
grace
[root@docker-test1 ~]
# /etc/init.d/sshd restart
2)pam规则也能够写成deny的。好比拒绝kevin、grace帐号进行登陆
操做以下:
[root@docker-test1 ~]
# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny
file
=
/etc/sshusers
onerr=succeed
........
[root@docker-test1 ~]
# touch /etc/sshusers
[root@docker-test1 ~]
# vim /etc/sshusers
kevin
grace
[root@docker-test1 ~]
# /etc/init.d/sshd restart
3)pam规则可使用group限制。
容许规则:
auth required pam_listfile.so item=group sense=allow
file
=
/etc/security/allow_groups
onerr=fail
禁止规则:
auth required pam_listfile.so item=group sense=deny
file
=
/etc/security/deny_groups
onerr=succeed
操做以下:
[root@docker-test1 ~]
# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_listfile.so item=group sense=allow
file
=
/etc/security/allow_groups
onerr=fail
新建一个组,组名为bobo,而后将kevin和grace添加到这个bobo组内
[root@docker-test1 ~]
# groupadd bobo
[root@docker-test1 ~]
# gpasswd -a kevin bobo
Adding user kevin to group bobo
[root@docker-test1 ~]
# usermod -G bobo grace
[root@docker-test1 ~]
# id kevin
uid=1000(kevin) gid=1000(kevin)
groups
=1000(kevin),1002(bobo)
[root@docker-test1 ~]
# id grace
uid=1001(grace) gid=1001(grace)
groups
=1001(grace),1002(bobo)
在
/etc/security/allow_groups
文件按中加入组名(注意若是不加root,则root就不能被容许登陆了)
[root@docker-test1 ~]
# vim /etc/security/allow_groups
bobo
[root@docker-test1 ~]
# /etc/init.d/sshd restart
如上设置后,则只有kevin用户能被容许登陆!
若是是禁止规则,则第一行改成下面内容:
auth required pam_listfile.so item=group sense=deny
file
=
/etc/security/deny_groups
onerr=succeed
|
================================================================
除此以外,禁止某些用户ssh登陆,可使用passwd或usermod命令进行帐号锁定。
http://www.javashuo.com/article/p-syrububf-ba.html
5)取消密码验证,只用密钥对验证
修改ssh服务配置文件/etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
6)给帐号设置强壮的密码:将密码保存到文本进行复制和粘帖就能够了
# rpm -ivh expect-5.43.0-5.1.i386.rpm| yum -y install expect
# mkpasswd -l 128 -d 8 -C 15 -s 10 //将下面密码保存到文本进行复制、粘贴便可
lVj.jg&sKrf0cvtgmydqo7qPotxzxen9mefy?ej!kcaX2gQrcu2ndftkeamllznx>iHikTagiVz0$cMtqOcIypkpd,vvD*kJhs3q@sb:CiCqgtqdqvse5lssfmranbtx
参数说明:
-l 密码长度
-d 多少个数字
-C 大写字母个数
-s 特殊符号的个数
7)只容许经过指定的网络接口来访问SSH服务,(若是本服务器有多个IP的时候)
仍然是修改/etc/ssh/sshd_config,以下:
ListenAddress 192.168.1.15 //默认监听的是0.0.0.0
这样,就只容许远程机器经过ssh链接本机的192.168.1.15内网ip来进行登录了。
8)禁止空密码登陆
若是本机系统有些帐号没有设置密码,而ssh配置文件里又没作限制,那么远程经过这个空密码帐号就能够登录了,这是及其不安全的!
因此必定要禁止空密码登录。修改/etc/ssh/sshd_config,以下:
PermitEmptyPasswords no //这一项,默认就是禁用空密码登录
9) ssh_config和sshd_config
ssh_config和sshd_config都是ssh服务器的配置文件,两者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都容许你经过设置不一样的选项来改变客户端程序的运行方式。sshd_config的配置通常都比较熟悉,下面单独说下ssh_config针对客户端的配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
[root@dns01 dns_rsync]
# cat /etc/ssh/ssh_config
# Site-wide defaults for various options
Host *
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication
yes
PasswordAuthentication
yes
FallBackToRsh no
UseRsh no
BatchMode no
CheckHostIP
yes
StrictHostKeyChecking no
IdentityFile ~/.
ssh
/identity
Port 22
Cipher blowfish
EscapeChar ~
下面对上述选项参数逐进行解释:
# Site-wide defaults for various options
带“
#”表示该句为注释不起做,该句不属于配置文件原文,意在说明下面选项均为系统初始默认的选项。说明一下,实际配置文件中也有不少选项前面加有“#”注释,虽然表示不起做用,实际上是说明此为系统默认的初始化设置。
Host *
"Host"
只对匹配后面字串的计算机有效,“*”表示全部的计算机。从该项格式前置一些能够看出,这是一个相似于全局的选项,表示下面缩进的选项都适用于该设置,能够指定某计算机替换*号使下面选项只针对该算机器生效。
ForwardAgent no
"ForwardAgent"
设置链接是否通过验证代理(若是存在)转发给远程计算机。
ForwardX11 no
"ForwardX11"
设置X11链接是否被自动重定向到安全的通道和显示集(DISPLAY
set
)。
RhostsAuthentication no
"RhostsAuthentication"
设置是否使用基于rhosts的安全验证。
RhostsRSAAuthentication no
"RhostsRSAAuthentication"
设置是否使用用RSA算法的基于rhosts的安全验证。
RSAAuthentication
yes
"RSAAuthentication"
设置是否使用RSA算法进行安全验证。
PasswordAuthentication
yes
"PasswordAuthentication"
设置是否使用口令验证。
FallBackToRsh no
"FallBackToRsh"
设置若是用
ssh
链接出现错误是否自动使用rsh,因为rsh并不安全,因此此选项应当设置为
"no"
。
UseRsh no
"UseRsh"
设置是否在这台计算机上使用
"rlogin/rsh"
,缘由同上,设为
"no"
。
BatchMode no
"BatchMode"
:批处理模式,通常设为
"no"
;若是设为
"yes"
,交互式输入口令的提示将被禁止,这个选项对脚本文件和批处理任务十分有用。
CheckHostIP
yes
"CheckHostIP"
设置
ssh
是否查看链接到服务器的主机的IP地址以防止DNS欺骗。建议设置为
"yes"
。
StrictHostKeyChecking no
"StrictHostKeyChecking"
若是设为
"yes"
,
ssh
将不会自动把计算机的密匙加入
"$HOME/.ssh/known_hosts"
文件,且一旦计算机的密匙发生了变化,就拒绝链接。
IdentityFile ~/.
ssh
/identity
"IdentityFile"
设置读取用户的RSA安全验证标识。
Port 22
"Port"
设置链接到远程主机的端口,
ssh
默认端口为22。
Cipher blowfish
“Cipher”设置加密用的密钥,blowfish能够本身随意设置。
EscapeChar ~
“EscapeChar”设置escape字符。<br>
=================================================================================
好比说,A机器的
ssh
端口是22,B机器的端口是22222,通常来讲A机器
ssh
链接B机器的时候是使用-p22222指定端口。可是能够修改A机器的
/etc/ssh/ssh_config
文件中的
Port为22222,这样A机器
ssh
链接的时候就默认使用22222端口了。
|
======================去掉SSH公钥检查的方法(交互式yes/no)========================
SSH公钥检查是一个重要的安全机制,能够防范中间人劫持等黑客攻击。可是在特定状况下,严格的 SSH 公钥检查会破坏一些依赖SSH协议的自动化任务,就须要一种手段可以绕过SSH的公钥检查。
SSH链接远程主机时,会检查主机的公钥。若是是第一次链接该主机,会显示该主机的公钥摘要,弹出公钥确认的提示,提示用户是否信任该主机(Yes/no)。当选择Yes接受,就会将该主机的公钥追加到文件 ~/.ssh/known_hosts 中。当再次链接该主机时,就不会再提示该问题了。
SSH公钥检查有好处,但首次链接时会致使某些自动化任务中断,或者因为 ~/.ssh/known_hosts 文件内容清空,致使自动化任务中断。
去掉SSH公钥检查的方法:
1)SSH客户端的StrictHostKeyChecking 配置指令,能够实现当第一次链接服务器时,自动接受新的公钥。只须要修改 /etc/ssh/ssh_config 文件,包含下列语句:
StrictHostKeyChecking no
2)或者在ssh链接命令中使用-oStrictHostKeyChecking=no参数
[root@puppet ~]# ssh -p22222 172.168.1.33 -oStrictHostKeyChecking=no
或者
[root@puppet ~]# ssh -p22222 172.168.1.33 -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no
====================ansible中取消ssh交换式yes/no==================
配置文件/etc/ansible/ansible.cfg的[defaults]中(打开注释)
# uncomment this to disable SSH key host checking
host_key_checking = False
===================ssh只容许使用key登陆, 禁止使用密码登陆================
1) 生产公私钥文件
# ssh-keygen -t rsa
上面命令一路回车, 此时在/root/.ssh/目录下生成了2个文件,id_rsa为私钥,id_rsa.pub为公钥。
私钥本身下载到本地电脑妥善保存(丢了服务器可就无法再登录了),为安全,建议删除服务器端的私钥。公钥则能够任意公开。
使用如下命令将公钥导入到系统中:
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
2) 修改SSH的配置文件/etc/ssh/sshd_config :
# vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#默认PasswordAuthentication 为yes,即容许密码登陆,改成no后,禁止密码登陆
PasswordAuthentication no
3) 重启SSH服务
# /etc/init.d/sshd restart
4) 接着就使用私钥登陆xshell或securecrt客户端了
=========================设置终端登陆超时时间====================
1
2
3
4
5
6
7
|
远程登陆linux服务器,如何设置终端失效时间(即过了多久不操做,终端即将失效)。方法以下:
[root@mq-console-nameserver ~]
# vim /etc/profile
......
export
TMOUT=600
[root@mq-console-nameserver ~]
# source /etc/profile
如上设置后,登陆这台服务器的终端在10分钟内不作操做,则该终端就将失效!
|
=======================SSH服务启动报错案例=======================
在某台服务器上部署了sftp服务,最后发现sftp远程登陆正常,可是ssh远程登陆失败(尽管已经输入了正确的用户名和密码)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[root@kevin
ssh
]
# service sshd restart
Stopping sshd: [ OK ]
Starting sshd:
/etc/ssh/sshd_config
line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config
line 83: Unsupported option GSSAPICleanupCredentials
Starting sshd: [ OK ]
如上启动后,远程
ssh
登陆这台机器,输入正确的用户名和密码,则会登陆失败!!
[root@kevin
ssh
]
# ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.1e-fips 11 Feb 2013
缘由是新版本的openssh不支持以上参数,须要修改sshd的配置文件。
修改内容以下,不然仍是没法经过
ssh
登陆这台服务器:
[root@kevin
ssh
]
# vim /etc/ssh/sshd_config
.......
##去掉前面的注释,容许root经过ssh登陆
PermitRootLogin
yes
##注释掉下面三个参数
#GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
#UsePAM yes
再次重启
ssh
,上面的报错信息就没有了。此时远程
ssh
登陆就OK了!
[root@kevin
ssh
]
# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
|
===============================================================
ssh的.pub公钥已经拷贝到远程主机的.ssh/authorized_keys文件里,可是ssh跳转时,仍然要输入密码!!即公钥下发后,ssh信任关系没有生效!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
解决办法:
1)远程主机对应用户家目录下的.
ssh
目录必须是700或755权限,毫不能是775或777权限!即只对该用户有写权限!(通常设置700权限)
2)远程主机对应用户家目录下的.
ssh
/authorized_keys
文件权限必须是600权限!即只对该用户有写权限!(通常设置600权限)
3)远程主机对应用户家目录的权限必须是700或755权限,毫不能是775或777权限!即只对该用户有写权限!(通常设置700权限),大多数状况下都是因为这个缘由致使的!!!
若是.
ssh
目录和.
ssh
/authorized_keys
文件权限对别的用户有写权限,则就会致使
ssh
认证失败!
=====================================================================================================
例如在一次ansible自动化部署中,以前配置好的
ssh
信任关系失效,报错以下:
{
"changed"
:
false
,
"msg"
:
"SSH Error: data could not be sent to remote host \"172.16.60.240\". Make sure this host can be reached over ssh"
,
"unreachable"
:
true
}
查看现象,发现以前配置好的
ssh
信任关系失效了!!
[root@bz3devjenci1002 lx0319]
# ssh -p22 kevin@172.16.60.240
Authorized only. All activity will be monitored and reported
kevin@172.16.60.240's password:
分析缘由及解决办法:
登陆172.16.60.240这台机器的kevin用户下,发现authorized_keys文件里确实已经传入了ansible主节点的id_rsa.pub公钥内容,而且下面两个权限都正确:
[kevin@bz4autestap1002 ~]$ ll -d .
ssh
drwx------ 2 kevin kevin 4096 Jul 24 10:48 .
ssh
#700权限是正确的
[kevin@bz4autestap1002 ~]$ ll .
ssh
/authorized_keys
-rw------- 1 kevin kevin 2412 Jul 24 10:45 .
ssh
/authorized_keys
#600权限也是正确的
而后查看kevin用户目录权限,发现是777!这才是问题根源!该用户目录权限不能对别的用户有写权限,不然会形成
ssh
认证失败!
[kevin@bz4autestap1002 ~]$ ll -d
/home/kevin
drwxrwxrwx 14 kevin kevin 4096 Jul 24 10:48
/home/kevin
修改成600权限便可
[kevin@bz4autestap1002 ~]$
chmod
600
/home/kevin
[kevin@bz4autestap1002 ~]$ ll -d
/home/kevin
drwx------ 14 kevin kevin 4096 Jul 24 10:48
/home/kevin
再次在远程尝试
ssh
认证跳转
[root@bz3devjenci1002 lx0319]
# ssh -p22 kevin@172.16.60.240
[kevin@bz4autestap1002 ~]$
|
===============================================================
Centos7修改ssh默认端口的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
CentOS 7 对于防火墙这一块的设置有必定的修改,修改
ssh
端口后,必须关闭防火墙和selinux以后才能正常重启sshd服务,不然启动失败。操做记录以下:
1)修改
/etc/ssh/sshd_config
#这个是修改ssh服务端配置文件。
[root@k8s-master01 ~]
# vim /etc/ssh/sshd_config
.........
#Port 22 #这行最好去掉#号,防止配置失效之后不能远程登陆,还得去机房修改,等修改之后的端口能使用之后在注释掉
Port 6666
#下面添加这一行
[root@k8s-master01 ~]
# vim /etc/ssh/ssh_config #这个是修改ssh客户端配置文件,通常能够不用修改。
........
# Port 22
Port 6666
======================================================================================================
ssh
客户端配置文件使用场景:
好比A机器的
/etc/ssh/ssh_config
客户端配置文件的
ssh
端口是22,B机器的
/etc/ssh/sshd_config
服务端配置文件是6666
那么A机器
ssh
链接B机器时就要带上
"-p6666"
, 若是A机器的
ssh
客户端配置文件的端口也是6666的话,就能够直接
ssh
链接B机器了。
======================================================================================================
2)要关闭防火墙和selinux。不然,centos7修改
ssh
端口后会启动sshd服务失败!必定要注意这个!
[root@k8s-master01 ~]
# systemctl disable firewalld
[root@k8s-master01 ~]
# systemctl stop firewalld
[root@k8s-master01 ~]
# firewall-cmd --state
not running
[root@k8s-master01 ~]
# cat /etc/sysconfig/selinux
.......
SELINUX=disabled
[root@k8s-master01 ~]
# setenforce 0
[root@k8s-master01 ~]
# getenforce
Disabled
这样,在修改
ssh
端口后,就能顺利启动sshd服务了!
======================================================================================================
这里还须要注意下:若是是打开了防火墙或selinux,则须要将修改的sshd端口添加到对应的防火墙规则中(默认只加了
ssh
的22端口)
a)firewalld配置
添加到防火墙:
# firewall-cmd --zone=public --add-port=6666/tcp --permanent (permanent是保存配置,否则下次重启之后此次修改无效)
重启:
#firewall-cmd --reload
查看添加端口是否成功,若是添加成功则会显示
yes
,不然no
# firewall-cmd --zone=public --query-port=6666/tcp
b)selinux配置
使用如下命令查看当前SElinux 容许的
ssh
端口:
# semanage port -l | grep ssh
添加6666端口到 SELinux
# semanage port -a -t ssh_port_t -p tcp 6666
而后确认一下是否添加进去
# semanage port -l | grep ssh
若是成功会输出
ssh_port_t tcp 6666, 22
c)而后就能够顺利启动sshd服务了。
|