一、SSH服务安装
1、安装ssh服务
如果你用的是redhat,fedora,centos等系列linux发行版,那么敲入以下命令:
-
sudo yum install sshd
-
sudo yum install openssh-server
如果你使用的是debian,ubuntu,linux mint等系列的linux发行版,那么敲入以下命令:
-
sudo apt-get install sshd
-
sudo apt-get install openssh-server
2、启动ssh服务
-
service sshd start
-
or
-
/bin/systemctl restart
-
or
-
/etc//sshd start
-
or
-
sudo systemctl restart sshd
设置开机运行
chkconfig sshd on
查看ssh服务的状态
sudo service sshd status
如果出现
Loaded: error (Reason: No such file or directory)
提示的话,说名没有安装ssh服务,按照第一步:安装ssh服务。
如果出现
Active: inactive (dead)
说明已经安装了ssh服务,但是没有开启。按照第二步:开启ssh服务。
如果出现
Active: active (running) since XXX
说明已经成功了
二、SSH服务卸载
如果你用的是redhat,fedora,centos等系列linux发行版,那么敲入以下命令:
yum remove sshd
如果你使用的是debian,ubuntu,linux mint等系列的linux发行版,那么敲入以下命令:
sudo apt-get –purge remove sshd1234
三、SSH服务配置
ssh客户端配置文件:
/etc/ssh/ssh_config
ssh服务端配置文件:
/etc/ssh/sshd_config
服务器端常用配置选项:
-
Port 22 #端口
-
ListenAddress #监听的IP
-
Protocol 2 #SSH版本选择
-
HostKey /etc/ssh/ssh_host_rsa__key #私钥保存位置
-
ServerKeyBits #1024
-
ServerFacility AUTH #日志记录ssh登陆情况
-
#KeyRegenerationInterval 1h #重新生成服务器密钥的周期
-
#ServerKeyBits 1024 #服务器密钥的长度
-
LogLevel INFO #记录sshd日志消息的级别
-
#PermitRootLogin yes #是否允许root远程ssh登录
-
#RSAAuthentication yes #设置是否开启ras密钥登录方式
-
#PubkeyAuthentication yes #设置是否开启公钥验登录方式
-
#AuthorizedKeysFile .ssh/authorized_keys #设置公钥验证文件的路径
-
#PermitEmptyPasswords no #设置是否允许空密码的账号登录
-
X11Forwarding yes #设置是否允许X11转发
-
GSSAPIAuthentication yes #GSSAPI认证开启
1、默认端口修改
注意:ssh默认端口号,建议修改为其他非常用端口。
-
#Port 22 #这行加#号注释掉
-
Port 2222 #下面添加这一行
2、监听IP地址
监听的IP,允许某些特定的IP才可以ssh登陆进来,0.0.0.0表示监听所有ipv4的22端口。
ListenAddress
3、采用SSH协议版本
默认的ssh版本,建议采用第二代版本。
Protocol 2
4、私钥配置
版本v2的私钥保存路径。
-
HostKey /etc/ssh/ssh_host_rsa__key
-
# HostKeys for protocol version 2
-
HostKey /etc/ssh/ssh_host_rsa_key
-
#HostKey /etc/ssh/ssh_host_dsa_key
5、加密位
钥匙串的加密位数,默认采用1024位加密。
ServerKeyBits 1024
6、日志等级
需要记录日志,并设定日志等级为INFO,建议不用修改。
ServerFacility AUTH & LogLevel INFO
7、GGSSAP认证
GGSSAP认证默认已开启,经过dns进行认证,尝试将主机IP和域名进行解析。若管理主机无对外域名,建议在管理主机上在客户端的配置文件将此认证关闭。
GGSSAPIAuthentication yes
服务器端安全配置选项:
-
PermitRootLogin yes #允许root的ssh登陆
-
PubkeyAuthentication yes #是否使用公钥验证
-
AuthorizeKeysFile .ssh/authorized_keys #公钥的保存位置
-
PasswordAuthentication yes #允许使用密码验证登陆
-
PermitEmptyPasswords no #不允许空密码登陆
注意:如果开启公钥验证,可以关闭允许root登陆、关闭允许使用密码验证登陆,此时将采用公钥验证登陆,无需输入密码。建议采用此更安全的方式,直接使用私钥和公钥匹配的公钥验证方式。
8、ssh指纹和knownhosts文件
服务器端有3对非对称加密秘钥,当客户端连接服务端时,将ssh公钥发给客户端,要传输的数据经过公钥加密再进行传输,保证数据传输安全。
为了防止ssh服务器伪造,通过私钥计算出ssh指纹,ssh指纹匹配才能证明是要登录的服务器。
当输入yes后,会在ssh客户端的家目录下多一个ssh服务器公钥文件。
跳过指纹检查,客户端直接接受服务器的公钥:
9、配置ssh免密码登录
1. 添加文件
-
vi /root/.ssh/authorized_keys //创建文件authorized_keys
-
authorized_keys 存放公钥,远程使用私钥登陆
-
chmod 600 /root/.ssh/authorized_keys //加权限
-
chmod 700 /root/.ssh/ //加权限
2. 添加公钥到文件内(id_rsa.pub)
-
这里是在本地客户端生成非对称加密秘钥
-
ssh-keygen -t rsa
-
密钥名称和密码可以不填 默认即可,密码默认空
将客户端公钥/root/.ssh/id_rsa.pub传到ssh服务器的/root/.ssh/authorized_keys。
vi /root/.ssh/authorized_keys
3. 编辑ssh配置文件:
-
vi /etc/ssh/sshd_config //编辑ssh配置文件
-
PermitRootLogin yes // 禁止root远程登录,可选项
-
PasswordAuthentication yes //使用基于口令认证的方式登陆,默认yes,可选项
-
//新增以下3个配置
-
PubkeyAuthentication yes //允许使用基于密钥认证的方式登陆,必选项
-
RSAAuthentication yes // 启用 RSA 认证 ,可选项
-
AuthorizedKeysFile .ssh/authorized_keys // 公钥文件路径,可选项
4. 重启sshd服务
service sshd restart
5. 在电脑终端输入
ssh root@47.96.118.128
免密登录常见错误:
-
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
-
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
-
It is also possible that a host key has just been changed.
-
The fingerprint for the ECDSA key sent by the remote host is
-
SHA256:sbd8mG3CPJc81mLgPPwLwVy7LF8qvUUuXisbcPKzTyE.
-
Please contact your system administrator.
-
Add correct host key in /Users/admin/.ssh/known_hosts to get rid of this message.
-
Offending ECDSA key in /Users/admin/.ssh/known_hosts:12
-
ECDSA host key for 47.96.118.128 has changed and you have requested strict checking.
-
Host key verification failed.
解决办法输入:
rm -rf ~/.ssh/known_hosts
然后重新连接即可。
客户端可以通过ssh-copy-id把自己公钥传递给服务器的某个用户家目录下,就可以免密登录该用户。
10、提升ssh响应速度
减少ssh的连接时间,提升ssh响应速度。
ssh -o ConnectTimeout=3 192.168.0.10
-
vim /etc/ssh/sshd_config
-
UseDNS no
11、配置ssh超时时间
用SSH登录到Linux的时候,由于默认的连接超时时间很短,经常需要断了后再连接,比较麻烦。可以通过设置linux ssh配置解决。
ClientAliveInterval 每隔多少秒给SSH客户端发送一次信号;
ClientAliveCountMax 超时重连的次数;
-
vim /etc/ssh/sshd_config
-
-
#没有的话在末尾添加
-
ClientAliveInterval 60
-
ClientAliveCountMax 10
意思是60秒检查一次客户端响应,最多检查10次。如果10次都检查到客户端不响应,那么就认为ssh已经断开了。
修改自己 root 目录下的/root/.bash_profile文件,加上:
export TMOUT=1000000 #以秒为单位
然后运行:
source .bash_profile
每一分钟,sshd都和ssh client打个招呼,检测它是否存在,不存时即断开连接。
注意:设置完成后,要退出ssh远程连接,再次登录后才可以生效。因为要再读取一次 ./bash_profile。
为了方便,将设置写成了如下脚本:
-
echo export TMOUT=1000000 >> /root/.bash_profile
-
cat /root/.bash_profile
-
source .bash_profile
-
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
-
echo ClientAliveInterval=60 >> /etc/ssh/sshd_config
-
service sshd restart
-
cat /etc/ssh/sshd_config
-
service sshd restart
-
exit
注意:在ClientAliveInterval(/etc/ssh/sshd_config)、环境变量TMOUT(在/etc/profile或.bash_profile中设置)以及putty的"Seconds between keepalives“这些方法中,经检测,只有TMOUT可以控制ssh连接在空闲时间超时,自动断开连接的时间,数字单位为“秒”。
在设置了TMOUT后(非0),另外两个变量则不起作用的。
另外,特别提醒的是,设置好ssh的登录超时时间以后,记得退出重新登录或重启系统,以使配置生效。
12、ssh无法登录
-
vim /etc/ssh/sshd_config
-
-
PermitRootLogin yes
重启ssh服务,就可以用root远程telnet本机。
SSH通过设置黑名单或白名单做某些限制,比如禁止通过某账号登录,或者禁止从某ip登录。
登录
1. 限制或允许通过某账号登录
在137服务器/etc/ssh/sshd_config里添加:
DenyUsers tc
可以看到现在无法通过tc用户登录到137服务器,而root用户可以正常登录。
如果为AllowUsers tc,则为允许tc用户登录:
AllowUsers tc
每次登录还需要输入用户名和ip,感觉比较麻烦,可以通过配置SSH快捷登录直接登录到linux服务器。
编辑当前用户家目录下的.ssh/config文件,如果没有则创建一个:
-
touch config
-
vim config
-
Host alias #自定义别名
-
HostName hostname #替换为你的ssh服务器ip
-
Port port #ssh服务器端口,默认22
-
User user #ssh服务器用户名
-
IdentityFile ~/.ssh/id_rsa #生成的公钥文件对应的私钥文件
可以看到直接通过ssh aliyun登录到135服务器了
2. 允许通过某个ip登录
-
vim /etc/
-
sshd:192.168.92.133:allow #允许 192.168.0.1 这个 IP 地址 ssh 登录
-
sshd:192.168.92.0/24:allow #允许 192.168.92.0/24 这段 IP 地址的用户登录
-
sshd:ALL # 允许全部的 ip通过ssh 登录
也可以限制从某ip登录:
-
vim /etc/
-
sshd:192.168.92.135:deny #拒绝135这个IP地址通过ssh登录
-
sshd:all:deny #拒绝所欲sshd远程连接
这里我们对设置,禁止通过135服务器登录到本机。
重启服务:
systemctl restart sshd
发现已经不能通过135服务器登录到本机。
白名单优先级高于黑名单,如果hosts.allow设置为允许133服务器登录,同时,为拒绝133服务器登录的时候,由于文件的优先级高,因此此时可以通过135服务器登录到本机。
13、ssh配置Selinux
-
[root@imxhy]# yum -y install policycoreutils-python
-
[root@imxhy]# semanage port -a -t ssh_port_t -p tcp 2222
-
[root@imxhy]# semanage port -l | grep ssh #查看SELinux设置
-
[root@imxhy]# firewall-cmd --permanent --add-port=2222/tcp
-
[root@imxhy]# systemctl restart
-
[root@imxhy]# systemctl restart
14、国产化麒麟操作系统SSH远程登录配置
1. 安装 ssh server
apt install openssh-server
2. 修改 /etc/ssh/sshd_config 文件
确保配置如下两项:
-
PermitRootLogin yes
-
PasswordAutherntication yes
关闭如下配置(这个在centos ubuntu 上没有这个要求,麒麟操作系统有):
#UsePAM yes
保存。
3. 重启sshd 服务
sudo systemctl restart ssh