SSH常见运维总结

1 -bash: ssh: command not found

解决办法:"yum install -y openssh-server openssh-clinets"

ssh登录时提示:Read from socket failed: Connection reset by peer.

原因:/etc/ssh/下没有ssh*key*文件

解决:

  • ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
  • ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
  • ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

然后再尝试远程连接,显示成功。

或者

直接重启服务

systemctl restart sshd

3 优化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监控机
===================================

那么上面的提醒信息是在哪设置的呢?
1)/etc/motd文件自定义

[root@monit-server ~]# cat /etc/motd
===================================
|||||||||||||||||||||||||||||||||||
===================================
HOSTNAME: monit-server
IPADDRES: 192.168.1.15
===================================
IDC监控机
===================================

2)在目标机器的/etc/ssh/sshd_config文件里定义,然后重启sshd服务即可。

[root@host-192-168-1-117 ~]#vim /etc/ssh/sshd_configBanner /etc/sshfile[root@host-192-168-1-117 ~]# cat /etc/sshfile
this is 192.168.1.117

远程登陆:

[root@linux-node2 ~]# ssh 192.168.1.117
this is 192.168.1.117
实现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.文件(文件会自动创建)中。

对于非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 
 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"
ssh远程登陆缓慢问题

解决办法:
编译/etc/ssh/sshd_config配置文件:

UseDNS no
GSSAPIAuthentication no

然后重启sshd服务即可!

ssh登录出现:permission denied(publickey.gssapi-with-mic)

解决方法:
修改/etc/ssh/sshd-config文件,将其中的:

PermitRootLogin no修改为yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉
PasswordAuthentication no修改为yes

最后重启sshd服务即可!

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服务。

ssh连接超时被踢出问题

当使用xshell,SecureCRT等客户端访问linux服务器,有时候会出现终端定期超时被踢出的情况。
下面介绍三种方法来防止超时被踢出的方法,后两种情况的设置方法以及通过设置shell变量来达到此目的的方法:

1)配置服务器
# vim /etc/ssh/sshd_config
找到 ClientAliveInterval参数,如果没有就自己加一行,数值是秒,比如你设置为120 ,则是2分钟
ClientAliveInterval 120
找到 ClientAliveCountMax参数,如果没有就自己加一行,指如果发现客户端没有响应,则判断一次超时,这个参数设置允许超时的次数。如3 、5等自定义

修改两项参数后如下:

ClientAliveInterval 120
ClientAliveCountMax 3                      //0 不允许超时次数
  • ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0,不发送.ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了.
  • ClientAliveCountMax, 使用默认值3即可.ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开. 正常情况下, 客户端不会不响应.

重新加载sshd服务。退出客户端,再次登陆即可验证。

# /etc/init.d/ssh restart

2)配置客户端
#vim /etc/ssh/ssh_config
然后找到里面的
ServerAliveInterval
参数,如果没有你同样自己加一个就好了
参数意义相同,都是秒数,比如5分钟等
ServerAliveInterval 300

3)配置超时

# echo export TMOUT=1000000 >> /root/.bash_profile; source .bash_profile
在Linux 终端的shell环境中通过设置环境变量TMOUT来阻止超时。如果显示空白,表示没有设置, 等于使用默认值0, 一般情况下应该是不超时. 如果大于0, 可以在如/etc/profile之类文件中设置它为0.

10 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的方式进行身份验证,但我们的系统不支持.

最后如果我们不用这种方式进行身份验证的话,建议关闭这个选项,这样可以提高验证时的速度.

11 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)只允许指定用户进行登录(白名单):
在 /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

########  还可以使用pam规则限制ssh登录  ########

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 restart2)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 restart3)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命令进行账号锁定。

5)取消密码验证,只用密钥对验证
修改ssh服务配置文件/etc/ssh/sshd_config

PasswordAuthentication no
PubkeyAuthentication yes

6)给账号设置强壮的密码:将密码保存到文本进行复制和粘帖就可以了

# 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针对客户端的配置文件:


[root@dns01 dns_rsync]# cat /etc/ssh/ssh_config
# Site-wide defaults for various optionsHost *ForwardAgent noForwardX11 noRhostsAuthentication noRhostsRSAAuthentication noRSAAuthentication yesPasswordAuthentication yesFallBackToRsh noUseRsh noBatchMode noCheckHostIP yesStrictHostKeyChecking noIdentityFile ~/.ssh/identityPort 22Cipher blowfishEscapeChar ~下面对上述选项参数逐进行解释:
# 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

########  ssh 登陆忽略known_hosts文件  ########
使用ssh登录远程机器,同时会把ssh信息记录在本地的~/.ssh/known_hsots文件中。如果出现ssh冲突了,需要手动删除或修改known_hsots里面对应远程机器的ssh信息。那么如果忽略掉这个known_hosts的访问? 操作如下:
1)修改/etc/ssh/sshd_config 配置文件中的选项 IgnoreUserKnownHosts 改成 yes,重启sshd服务即可。
2)如果还是不行,就在/etc/ssh/sshd_config 配置文件中再加入一下几行,然后再重启sshd服务。

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

########  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客户端了

########  SSH服务启动报错案例  ########
在某台服务器上部署了sftp服务,最后发现sftp远程登录正常,但是ssh远程登录失败(尽管已经输入了正确的用户名和密码)。


[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连接超时时间(timed out)设置  ########

1)使用下面命令连接,可以减少ssh连接超时等待的时间

# ssh -o ConnectTimeout=5 -p22 root@172.16.60.20

或者

修改sshd_config文件里面的UseDNS 选项,改为

UseDNS no

2)设置SSH超时时间的方法

# vim /root/.bash_profile export TMOUT=1000000#以秒为单位。或者修改/etc/profile文件也可以。# source /root/.bash_profile# vim /etc/ssh/sshd_configClientAliveInterval=60# service sshd restart

意思是每过一分钟,sshd都会和ssh client打个招呼 (即服务器端给客户端发送一个"空包"),检测它是否存在,如果不存时则断开连接!

注意:设置完成后,要退出ssh远程连接,再次登录后才可以生效。因为要再读取一次~/bash_profile文件。

总结:

在ClientAliveInterval(/etc/ssh/sshd_config)、环境变量TMOUT(在/etc/profile或.bash_profile中设置)以及putty的"Seconds between keepalives"(默认为0)这些设置方法中,经检测验证,只有TMOUT可以控制ssh连接在空闲时间超时,自动断开连接的时间,数字单位为"秒"。在设置了TMOUT后(非0),另外两个变量则不起作用的。

特别提醒的是,设置好ssh的登录超时时间以后,记得退出重新登录或重启系统,以使配置生效。

3)SSH禁止超时设置

SSH默认过一段时间会超时,有时候正在执行着脚本,出去一会回来就断开了,输出信息都看不到了,很是无奈!

其实禁止SSH自动超时最简单的办法就是:每隔一段时间在客户端和服务器之间发送一个"空包"!!!!!

至于到底是从客户端发给服务器,还是服务器发给客户端其实都不重要,重要的是需要它们之间要有通信。

下面介绍两种阻止SSH连接超时的方法(推荐方法二):

方法一:客户端阻止SSH超时编辑本地的SSH配置文件:~/.ssh/config

# vim ~/.ssh/configServerAliveInterval 120

这个设置会让客服端机器在使用SSH连接服务器时,每隔120秒给服务器发送一个"空包",保持它们之间的连接。

方法二:服务器端阻止SSH超时如果有服务器端的root权限,可以在服务端进行配置,这样就不需要每个客户端都单独配置。
 

# vim /etc/ssh/sshd_configClientAliveInterval 120ClientAliveCountMax 720

第一行,表示每隔120秒向客户端发送一个"空包",以保持于客户端的连接。

第二行,表示总共发送720次"空包",之后断开它们之间的连接,也就是:120秒 × 720 = 86400 秒 = 24小时 后。

最后重启sshd服务,再打开新终端进行ssh连接就可以了,在24小时内不会出现连接超时。# /etc/init.d/ssh restart

######## SSH公钥下发无效 ########
ssh的.pub公钥已经拷贝到远程主机的.ssh/authorized_keys文件里,但是ssh跳转时,仍然要输入密码!!即公钥下发后,ssh信任关系没有生效!

解决办法:
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默认端口的方法  ########

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 22Port 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/tcpb)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, 22c)然后就可以顺利启动sshd服务了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测:数据集划分 XML数据集转YOLO标签

文章目录 1、前言&#xff1a;2、生成对应的类名3、xml转为yolo的label形式4、优化代码5、划分数据集6、画目录树7、目标检测系列文章 1、前言&#xff1a; 本文演示如何划分数据集&#xff0c;以及将VOC标注的xml数据转为YOLO标注的txt格式&#xff0c;且生成classes的txt文件…

Ubuntu 大压缩文件解压工具

Ubuntu 大压缩文件解压工具 任务解决 任务 需要解压一个百度网盘上下载的压缩文件&#xff0c;zip格式。 直接右键’提取到此处’&#xff0c;会报错&#xff1a;empty archive 用unzip指令&#xff0c;会报错&#xff1a; Archive: 实验.zip warning [实验.zip]: 12540984…

李笑来-财富自由之路【边读边记】2

2024-04-01 23:50 处理完杂事&#xff0c;已经快12点了&#xff0c;但还是想读完这本书。 昨天晚上看完前8章&#xff0c;对李笑来这个同志有了初步的判断&#xff0c;然后不由得去抖音搜了下这个人的资料&#xff0c;果然关于炒币狂转上百亿一下子就出来了&#xff0c;还有就是…

Nginx 日志输出配置json格式

nginx日志输出配置json格式 nginx服务器日志相关指令主要有两条&#xff1a; (1) 一条是log_format&#xff0c;用来设置日志格式 (2) 另外一条是access_log&#xff0c;用来指定日志文件的存放路径、格式和缓存大小。 log_format指令用来设置日志的记录格式&#xff0c;它的语…

Javaweb的学习22_JavaScript简介

JavaScript 简介&#xff1a; 概念&#xff1a;一门客户端脚本语言 运行在客户端浏览器中&#xff1b;每一个浏览器都有JavaScript的解析引擎 脚本语言&#xff1a;不需要编译&#xff0c;直接就可以被浏览器解析执行 功能&#xff1a; 可以来增强用户和html页面的交互过程&…

iOS移动应用实时查看运行日志的最佳实践

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 &#x1f4dd; 摘要&#xff1a; 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具&#xff0c;我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

目标检测——工业安全生产环境违规使用手机的识别

一、重要性及意义 首先&#xff0c;工业安全生产环境涉及到许多复杂的工艺和设备&#xff0c;这些设备和工艺往往需要高精度的操作和严格的监管。如果员工在生产过程中违规使用手机&#xff0c;不仅可能分散其注意力&#xff0c;降低工作效率&#xff0c;更可能因操作失误导致…

云原生技术赋能AI绘图:Stable Diffusion在腾讯云的部署与应用新篇章

摘要 随着信息技术的飞速发展和数字化转型的深入推进&#xff0c;云原生架构已成为企业数字化转型的重要基石。Docker容器、Serverless和微服务等技术作为云原生的核心组成部分&#xff0c;正在不断推动着企业应用架构的革新与升级。本文旨在总结近期在云原生实践、容器技术、…

linux三件客之awk全解

01.awk awk:编程语言 GNU/awk 作用&#xff1a;1.取行2.取列3.模糊过滤4.数据统计&#xff0c;数据运算5.支持for循环 if判断 数组……6.格式化输出 sed后向引用 语法结构&#xff1a;awk 模式 file # 模式是找谁 指定行 指定列 模糊查找 不加任何动作awk 模式&#xff08…

rust并行计算库Rayon

rust并行计算库Rayon rust并行计算库Rayon什么是并行计算Rayon工作窃取算法第一个Rayon应用Rayon线程池Rayon任务调度Rayon并行迭代Rayon并行计算模式map-reduceRayon并行计算模式filter-mapRayon并行计算模式scanRayon并行策略Rayon并行策略静态分块Rayon并行策略动态分块Ray…

工作常用Linux命令记录

工作常用Linux命令记录 一、基础部分1、光标快速移动2、杀死指定端口3、查看磁盘占用4、CPU占用5、JVM命令 二、日志部分1、固定打印日志2、追加打印日志3、查询关键字周围4、浏览日志 一、基础部分 1、光标快速移动 mac下 移动到上一个单词&#xff1a;option➡️ 移动到下一…

混合现实(MR)开发工具

混合现实&#xff08;MR&#xff09;开发工具是一系列软件和框架&#xff0c;它们使得开发者能够创建和优化能够在虚拟与现实世界之间无缝交互的应用程序。以下是一些在MR领域内广泛使用的开发工具。 1.Microsoft Mixed Reality Toolkit (MRTK) MRTK是一个跨平台的工具包&…

【操作系统】FCFS、SJF、HRRN、RR、EDF、LLF调度算法及python实现代码

文章目录 一、先来先服务调度算法&#xff08;FCFS&#xff09; 二、短作业优先调度算法&#xff08;SJF&#xff09; 三、高响应比优先调度算法&#xff08;HRRN&#xff09; 四、轮转调度算法&#xff08;RR&#xff09; 五、最早截至时间优先算法&#xff08;EDF&#…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 &#xff08;1&#xff09;关于CPU &#xff08;2&#xff09;关于内…

Autodesk 3DS MAX 2025 (3Dmax2025)激活版

3ds Max 2025 是一款功能强大的3D建模、动画和渲染软件&#xff0c;广泛应用于建筑、游戏开发、影视制作等多个领域。在材质设定和描影、3D彩现以及动画和效果方面&#xff0c;3ds Max 2025也提供了丰富的增强功能&#xff0c;以满足用户在不同制作需求中的要求。 3ds Max 2025…

Docker——Dockerfile构建MySQL并初始化数据

目录 Dockerfile构建MySQL编写Dockerfile构建和运行Docker容器 Dockerfile构建MySQL 编写Dockerfile # 使用MySQL5.7镜像作为基础 FROM mysql:5.7# 复制初始化SQL脚本到容器中 COPY *.sql /docker-entrypoint-initdb.d/# 设置环境变量&#xff08;root密码&#xff09; ENV M…

几个好用的audio数字信号处理的开源地址marks(持续更新中)

这里写目录标题 Sound Open FirmwareMUSICDSPFFMPEGCMSIS DSP安卓oboe参考 Sound Open Firmware 根据此SOF Project documentation介绍&#xff0c;SOF项目是针对声音处理的开源固件平台&#xff0c; BSD 3-clause license协议, firmware部分使用者有比较大的自由度。 MUSICD…

Linux多进程通信(2)——POSIX信号量使用例程

1.POSIX信号量 1&#xff09;POSIX信号量和System V信号量区别 常用的是POSIX信号量&#xff0c;使用起来更加方便&#xff0c;而POSIX信号量分为有名信号量和无名信号量 POSIX信号量是多线程多进程安全的&#xff0c;而System V标准的信号量并不是&#xff0c;Posix通过sem_…

外包干了25天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Mysql中的 IFNULL 函数的详解

Mysql中的 IFNULL 函数的详解 概念 在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL&#xff0c;如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返回第二个参数的值。 语法 IFNULL(a, b)Demo 举例说明 创建表 create table student_one( sno varchar(20)…