[TOC]
0x00 快速入门
SSH(Secure Shell,安全外壳协议)命令是openssh套件中的客户端连接工具,采用了非对称加密算法aymmetric encryption algorithm实现安全的远程登录服务器;
SCP(Secure Copy Protocol)Linux机器间的文件传递最简单最安全的方式scp命令
0x01 安全配置
ssh服务安装:
[TOC]
SSH(Secure Shell,安全外壳协议)命令是openssh套件中的客户端连接工具,采用了非对称加密算法aymmetric encryption algorithm实现安全的远程登录服务器;
SCP(Secure Copy Protocol)Linux机器间的文件传递最简单最安全的方式scp命令
ssh服务安装:
[TOC]
SSH(Secure Shell,安全外壳协议)命令是openssh套件中的客户端连接工具,采用了非对称加密算法aymmetric encryption algorithm实现安全的远程登录服务器;
SCP(Secure Copy Protocol)Linux机器间的文件传递最简单最安全的方式scp命令
ssh服务安装:1
2
3
4
5
6
7
8# Debian 系
sudo apt-get update
sudo apt-get install -y openssh-server
# Redhat 系
sudo yum update
sudo yum install -y openssh-server
sudo dnf install -y openssh-server
服务启动/自启设置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 方式1
systemctl enable/disable sshd # 自启启用或禁用
systemctl start sshd
# 方式2.
# chkconfig ssh on/off # 自启启用或禁用
# service ssh start
# /etc/init.d/ssh start
# kail-Deban自启服务
# update-rc.d ssh enable #开启自启
# update-rc.d ssh disabled #关闭自启
# 查看启动状态以及进程
systemctl status sshd
sudo ps -e | grep ssh
配置文件 /etc/ssh/sshd_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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85#(1)基础配置
Port 20222 # SSH 预设使用 22 端口,建议更改默认的通信端口,例如20222
Protocol 2 # 选择的SSH协议版本2,如果要同时支持两者,就必须要使用 2,1 这个分隔
#ListenAddress 0.0.0.0 #监听的来自主机网卡的所有请求
ListenAddress 192.168.0.100 #只监听来自 192.168.0.100 这个 IP 的SSH联机,如果不使用设定的话,则预设所有接口均接受 SSH
PidFile /var/run/sshd.pid #可以放置 SSHD 这个 PID 的档案!左列为默认值
LoginGraceTime 60 # 当使用者连上 SSH server 之后,会出现输入密码的画面在多久时间内没有成功连上 SSH server 就断线!时间为秒!
Compression yes # 是否可以使用压缩指令
#(2)关于 version 1 的一些设定
KeyRegenerationInterval 3600 # 由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,那么如果这个 Public
# Key 被偷的话,岂不完蛋?所以需要每隔一段时间,来重新建立一次!这里的时间为秒!
ServerKeyBits 768 # Server key 的长度!
#(3)关于登录文件的讯息数据放置与 daemon 的名称
SyslogFacility AUTH # 当有人使用 SSH 登入系统的时候,SSH会记录资讯,这个信息要记录在什么 daemon name 底下?
#预设是以 AUTH 来设定的,即是 /var/log/secure 里面!
#Linux 基础其它可用的 daemon name 为:DAEMON,USER,AUTH, LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,
LogLevel INFO # 登录记录的等级!任何讯息!
#(4)安全设定项目
# 4.1登入设定部分
PermitRootLogin no # 是否允许 root 登入!预设是允许的,但是建议设定成 no!
UserLogin no # 在 SSH 底下本来就不接受 login 这个程序的登入!
StrictModes yes # 当使用者的 host key 改变之后,Server 就不接受联机,可以抵挡部分的木马程序!
#说明主机的 Private Key 放置的档案,预设使用下面的档案即可
HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥
# 4.2 认证部分
RhostsAuthentication no # 本机系统不止使用 .rhosts ,因为仅使用 .rhosts 太 不安全了,所以这里一定要设定为 no !
IgnoreRhosts yes # 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!
RhostsRSAAuthentication no # 这个选项是专门给 version 1 用的,使用 rhosts 档案在# /etc/hosts.equiv配合 RSA 演算方式来进行认证!不要使用
HostbasedAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no # 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录主机内容?当然不要忽略,所以这里就是 no 啦!
PasswordAuthentication yes # 密码验证当然是需要的!所以这里写 yes 啰!
PermitEmptyPasswords no # 若上面那一项如果设定为 yes 的话,这一项就最好设定 为 no,是否允许以空的密码登入!当然不许!
ChallengeResponseAuthentication yes # 挑战任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用!
#PAMAuthenticationViaKbdInt yes # 是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效!
#RSAAuthentication yes # 是否使用纯的 RSA 认证!?仅针对 version 1 !
PubkeyAuthentication yes # 是否允许 Public Key ?当然允许啦!只有 version 2
AuthorizedKeysFile .ssh/authorized_keys # 上面这个在设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在档名!
# 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no
# 4.4 底下是有关在 X-Window 底下使用以及转发代理相关设定!
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
# 4.5 登入后的项目:
PrintMotd no # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
PrintLastLog yes # 显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive yes # 一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
# 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会有僵尸程序的发生!
UsePrivilegeSeparation yes # 使用者的权限设定项目!就设定为 yes 吧!
MaxStartups 10 # 同时允许几个尚未登入的联机画面?当我们连上 SSH ,尚未输入密码时,这个时候就是我们所谓的联机画面啦!
# 在这个联机画面中,为了保护主机,所以需要设定最大值,预设最多十个联机画面,而已经建立联机的不计算在这十个当中
# 4.6 关于使用者抵挡的设定项目:
DenyUsers * # 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部 挡吧!若是部分使用者,可以将该账号填入!例如下列!
DenyUsers test
DenyGroups test # 与 DenyUsers 相同!仅抵挡几个群组而已!
# 4.7 配置SSH加密套件
Ciphers aes256-ctr,aes128-ctr,aes192-ctr
# 4.8 未禁用环境处理
PermitUserEnvironment no
# 4.9 配置SSH失败尝试
MaxAuthTries
# 5. 关于 SFTP 服务的设定项目!
Subsystem sftp /usr/lib/ssh/sftp-server
ssh密匙认证
原理:密匙认证需要依靠密匙,首先创建一对密匙(包括pub公匙和pri密匙,并且用公匙加密的数据只能用密匙解密),并把公匙放到需要远程服务器上。这样当登录远程服务器时,客户端软件就会向服务器发出请求,请求用你的密匙进行认证。
服务器收到请求之后,先在你在该服务器的宿主目录下寻找你的公匙 authrozied_keys 和 knows_hosts
,然后检查该公匙是否是合法,如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件,客户端软件收到 “challenge”之后就用私匙解密再把它发送给服务器,因为用公匙加密的数据只能用密匙解密
,服务器经过比较就可以知道该客户连接的合法性。
实验环境:1
2客户机:172.16.142.4
远端主机:172.16.142.5
配置文件为:/etc/ssh/sshd_config
1 | RSAAuthentication yes #ssh v1 |
Step2-本地生成密匙(客户机)
在客户机以root用户执行下述命令:
1 | [root@localhost .ssh]# /usr/bin/ssh-keygen -t rsa -P |
Step3-远程配置文件上传(远端主机)
1 | [root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@172.16.142.5:/root/.ssh/authorized_keys |
说明:将公钥拷贝到远端主机,并写入授权列表文件,你也可以把公钥文件拷贝过去后,在远端主机下直接执行;
1 | touch /root/.ssh/authorized_keys |
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
26ssh [选项] host参数 '命令'
ssh root@ip
#选项
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址 #(代理转发使用)
-C:请求压缩所有数据;
-D: 指定绑定地址和端口 #(代理转发使用)
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
-T: 表示不分配伪终端,但-T相当于notty,ctrl+C会中断会话
基础示例: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# 示例1.指定连接ssh的用户端口
ssh root@192.168.200.250 -p 2222
# 示例2.命令执行
ssh root@10.10.100.221 'hostname -I'
Secure login: unauthorized users are not allowed to access the system.
root@10.10.100.221 password:
10.10.100.221
# 示例3.指定密匙登录
ssh root@DROPLET_IP -i /path/to/private_key
#用户名为root私钥文件路径为~/test,用户名为ubuntu,服务IP为203.111.111.111
ssh -i ~/test ubuntu@203.111.111.111
# 示例4.ssh指定用户名和指定shell类型连接(类似于反弹shell-并且不记录命令)
ssh -l root 10.10.107.222 /bin/bash
# id
# uid=0(root) gid=0(root) groups=0(root)
# 示例5.循环命令执行
for i in {16..20};do
ssh -p 20211 192.168.1.${i} 'wget http://192.168.1.1:8000/filebeatInstall.sh -O /tmp/filebeatInstall.sh && chmod +x /tmp/filebeatInstall.sh && cd /tmp/ && bash -c /tmp/filebeatInstall.sh'
done
# 示例6.端口映射转发示例
# 1) 监听本地10.10.107.242:8888端口,并将访问请求转发到10.22.0.3:80中
ssh -p 20211 -N -v -L 10.10.107.242:8888:10.22.0.3:80 root@10.10.107.242
ssh-keygen 命令
描述:生成公匙与密匙进行相应的认证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
35usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa]
[-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-m key_format] [-f input_keyfile]
ssh-keygen -e [-m key_format] [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D pkcs11
ssh-keygen -F hostname [-f known_hosts_file] [-l]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -r hostname [-f input_keyfile] [-g]
ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines]
[-j start_line] [-K checkpt] [-W generator]
ssh-keygen -s ca_key -I certificate_identity [-h] [-U]
[-D pkcs11_provider] [-n principals] [-O option]
[-V validity_interval] [-z serial_number] file ...
ssh-keygen -L [-f input_keyfile]
ssh-keygen -A
ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
file ...
ssh-keygen -Q -f krl_file file ...
#参数解释
-a #当保存一个新格式的私钥(即ed25519密钥或设置-o标志时的任何SSH协议2密钥)时,此选项指定KDF的数量(增加碰撞难度)
-b #生成指定位数的密匙
-l #显示指定公钥文件的指纹支持私有RSA1密钥。对于RSA和DSA密钥ssh-keygen试图找到匹配的pub-并打印其指纹。如果与-v相结合则提供了密钥的可视ASCII艺术表示。
-p #交互模式输入密码
-o #Ed25519密钥总是使用新的私钥格式,使用新的OpenSSH格式保存私钥而不是更兼容的PEM格式。新格式增加了输入量抵抗暴力破解密码 ( 必须 > 6.5 版本)
-t #指定加密类型生不同类型的密钥: rsa / dsa / ECDAS /ed25519
-f #指定私钥文件文件路径
-y #此选项将读取专用OpenSSH格式文件,并将OpenSSH公钥打印到stdout。
实际案例: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#示例1.生成带密码的密匙登录认证(安全认证算法Key)
ssh-keygen -t dsa -P '123456' -f ~/.ssh/id_dsa #(不需要交互执行)
ssh-keygen -t rsa -b 1024 -p #命令行设置生成rsa密匙和交换式设置密匙密码 #(需要交互执行)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
#生成Ed25519算法的key
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "john@example.com"
#示例2.命令行设置密匙密码并生成密匙
ssh-keygen -N "123456789"
ssh-keygen -P "123456789"
#示例3.终端密匙生成的目录文件
ssh-keygen -f /testdir/test/id_rsa
#示例4.根据私钥生成公钥如果密匙有密码则需要输入密码
ssh-keygen -f /testdir/test/id_rsa -y
ssh-keygen -f /testdir/test/id_rsa -y > id_rsa.pub
#示例5.当前认证公钥key加密算法及其强度
for key in ~/.ssh/id_*; do ssh-keygen -l -f "${key}" -v; done | uniq
# 2048 SHA256:pF71q3tXhtGx6EOIC/WZVKt/y9q5OCS2NviKlXVO1eY root@master (RSA)
scp 命令
描述: 注意 scp命令不会进行内容的追加而会覆盖整个文件
1 | #语法: |
基础示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# 下载
$scp root@192.168.133.129:/root/index.html c:\\index.html #注意Windows指定路径时候需要转义符号
# 上传
$scp nssock2.zip root@192.168.133.129:/root
# 指定端口
$scp -P 18768 Architecture.c root@23.106.133.193:/root
# 覆盖已存储的文件
~$ echo 1024 > 1.txt
~$ scp -P 20211 1.txt weiyigeek@weiyigeek-108:~
**************WARNING**************
Authorized only. All activity will be monitored and reported.
1.txt 100% 5 13.2KB/s 00:00
~$ echo 1111 > 1.txt
~$ scp -P 20211 1.txt weiyigeek@weiyigeek-108:~
**************WARNING**************
Authorized only. All activity will be monitored and reported.
1.txt 100% 5 13.9KB/s 00:00
~$ ssh -p 20211 weiyigeek@weiyigeek-108 "cat 1.txt"
**************WARNING**************
Authorized only. All activity will be monitored and reported.
1111
ssh-add 命令
描述:
1 | # (1) 加载私有密匙到 ssh-agent 密匙管理即默认采用此密钥进行访问操作 |
scp-copy-id 命令
描述:进行密匙的拷贝后面就能采用免密码登录;1
2
3
4
5
6#基础语法
/usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
#参数
- i 指定认证文件
- o 指定ssh协议选项
基础示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#示例1.将生成的公匙存入到对端的机器的.ssh/authorized_keys
$ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.107.234 #指定公匙文件
.ssh> ssh-copy-id root@10.10.107.221 #或者 cp id_rsa.pub authorized_keys
# .ssh> ssh 'root@10.10.107.221'
# Secure login: unauthorized users are not allowed to access the system.
#示例2.一步到位
cat ~/.ssh/id_rsa.pub | ssh -p 22 zsy@10.1.0.3 "umask 077;mkdir -p ~/.ssh;cat - >> ~/.ssh/authorized_keys"
#一般是把本地生成的密匙复制到远程主机上authorized_keys文件中
[root@slave ~]$cat .ssh/authorized_keys #同时记录连接的IP
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINDMnJ7QL1PXaWI63is2wqj9HG7Gc/AxT07F4RRujyPR ubuntu@WeiyiGeek
#将每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts [Centos]
[root@slave .ssh]# cat known_hosts
10.10.107.222 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJABL46Qd7sXwu/GW2+8KCNRfUXzh+6EGKnheq6+o+Uhp4PCt6M2/pMuV2mPfeIAsE/cYL1X0vYOtLrLG3Wjun0=
#当ssh服务器未使用默认端口号时,使用如下命令
centos6中:ssh-copy-id -i ~/.ssh/id_rsa.pub "zsy@10.1.0.3 -p 22222"
centos7中:ssh-copy-id -i ~/.ssh/id_rsa.pub zsy@10.1.0.3 -p 22222
使用 known_hosts 优缺点
在ssh中设置登录提示信息
/etc/issue.net #远程登录信息显示 不支持转义字符 只支持普通文本.是否显示欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定
/etc/motd #本地或远程都可显示欢迎信息1
2
3
4
5
6
7
8
9
10
11#修改Terminal login时得提示: 在/etc/ssh/sshd_config添加“Banner /etc/ssh/ssh_login_banner” 或者 Banner /etc/issue
/etc/issue #本地登录信息显示
\d : Show Current System 日期
\S : 名称
\l :登录时终端编号
\m :硬件体系架构
\n : 显示主机名
\o : 显示域名
\r : 显示内核kernel版本
\t : 显示当前时间
\u : 当前登录用户的序列号
实际案例:1
2
3echo "Authorized uses only. 您的所有活动均被监测和报告."> /etc/issue
echo "Authorized uses only. 您的所有活动均被监测和报告."> /etc/issue.net
echo "Authorized uses only. All activity may be monitored and reported." >>/etc/motd
用SecureCRT进行免密码登陆
(1)将BT5生成的公私钥文件拷到windows本机上,打开SecureCRT新建session,配置服务器的基本信息后连接,当然这个时候是不会成功的。
(2)右键失败的session,选择“Session Options”—->”SSH2″—>”PublicKey”—>”Properties”后选择生成的私钥文件
选择完后,点击“ok”后,右键“Reconnect”即可成功登陆。
云服务器 SSH-KEY公匙/密匙登录
生成公匙和密匙:1
2
3
4
5
6
7#配置config文件,详细请参考从本地Linux机器登录到Linux云服务器(无公网IP)中的STEP1 /etc/ssh/ssh_config 文件
#找到ForwardAgent项,并设置为yes
chmod 400 私钥文件 #将您的私钥文件设置权限为400
eval `ssh-agent` #启动ssh-agent
ssh-add #加载私钥
ssh -i 私钥文件 系统管理员@服务器IP #对于ubuntu系统管理员为ubuntu;
ssh -i ~/test ubuntu@203.111.111.111 #centos,debian,suse用
利用公匙登录1
2
3/root/.ssh/authorizeb_keys #将A机生成的.pub添加到authorizeb_keys
chmod 600 /root/.ssh/authorizeb_keys #新建文件权限加入600
/etc/init.d/start #启动secure shell
自定义SSH版本信息
描述:默认情况下telnet ip 22 端口会显示 openssh的版本信息1
2
3
4
5
6
7
8
9
10#搜索可执行文档和路径
$whereis sshd
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz
#替换二进制文件中的版本信息
cp /usr/sbin/sshd /usr/sbin/sshd2016.bak #复制前需要进行备份
sed -i 's/OpenSSH_4.2/OpenSSH_8.2/g' /usr/sbin/sshd #关键点
service restart sshd
$telnet 22端口测试banner信息
ssh避免首次登录服务时候需要输入yes,这时我们可以将StrictHostKeyChecking修改为no
方式1.配置文件1
2
3
4
5
6
7
8
9
10
11
12
13$vim /etc/ssh/ssh_config
Host *
GSSAPIAuthentication yes
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
# mode correctly we set this to yes.
ForwardX11Trusted yes
# Send locale-related environment variables
SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
SendEnv XMODIFIERS
StrictHostKeyChecking no 关键点
方式2.命令行方式1
2
3
4
5
6
7
8
9
10# 首先连接主机并且不校验主机
ssh -oStrictHostKeyChecking=no root@weiyigeek
# 之后在主机和ip地址之间生成正确的映射
#!/bin/bash
for domain in "github.com" "bitbucket.org"; do
sed -i "/$domain/d" ~/.ssh/known_hosts
line=$(ssh-keyscan $domain,`nslookup $domain | awk '/^Address: / { print $2 ; exit }'`)
echo $line >> ~/.ssh/known_hosts
done
Shell 脚本一览: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"[-] 系统sshd服务安全策略设置."
# 备份文件
BACKUPDIR=/tmp/
cp -a /etc/ssh/sshd_config ${BACKUPDIR}
# 服务端口
VAR_SSHD_PORT=20222
# 0.设置SSH登录前Banner警告提示
egrep -q "^\s*(banner|Banner)\s+\W+.*$" /etc/ssh/sshd_config && sed -ri "s/^\s*(banner|Banner)\s+\W+.*$/Banner \/etc\/issue.net/" /etc/ssh/sshd_config || \
echo "Banner /etc/issue.net" >> /etc/ssh/sshd_config
# 1.设置SSH禁止root远程登录(推荐配置-但还是要根据需求配置)
egrep -q "^\s*PermitRootLogin\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*PermitRootLogin\s+.+$/PermitRootLogin no/" /etc/ssh/sshd_config || echo "PermitRootLogin no" >> /etc/ssh/sshd_config
# 2.设置SSH严格模式
sudo egrep -q "^(#)?\s*StrictModes\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*StrictModes\s+.+$/StrictModes yes/" /etc/ssh/sshd_config || echo "StrictModes yes" >> /etc/ssh/sshd_config
# 3.更改SSH服务端口
sudo egrep -q "^(#)?\s*Port\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*Port\s+.+$/Port ${VAR_SSHD_PORT}/" /etc/ssh/sshd_config || echo "Port ${VAR_SSHD_PORT}" >> /etc/ssh/sshd_config
# 4.关闭禁用用户的 .rhosts 文件 ~/.ssh/.rhosts 来做为认证,缺省 IgnoreRhosts yes.
egrep -q "^(#)?\s*IgnoreRhosts\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*IgnoreRhosts\s+.+$/IgnoreRhosts yes/" /etc/ssh/sshd_config || echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config
egrep -q "^(#)?\s*HostbasedAuthentication \s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*HostbasedAuthentication \s+.+$/HostbasedAuthentication no/" /etc/ssh/sshd_config || echo "HostbasedAuthentication no" >> /etc/ssh/sshd_config
# 5.设置安全协议版本
egrep -q "^(#)?\s*Protocol\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*Protocol\s+.+$/Protocol 2/" /etc/ssh/sshd_config || echo "Protocol 2" >> /etc/ssh/sshd_config
# 6.设置日志等级 默认是VERBOSE,设置为INFO
egrep -q "^(#)?\s*LogLevel\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*LogLevel\s+.+$/LogLevel INFO/" /etc/ssh/sshd_config || echo "LogLevel INFO" >> /etc/ssh/sshd_config
# 7.禁用空密码用户登录
egrep -q "^(#)?\s*PermitEmptyPasswords\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*PermitEmptyPasswords\s+.+$/PermitEmptyPasswords no/" /etc/ssh/sshd_config || echo "PermitEmptyPasswords no" >> /etc/ssh/sshd_config
# 8.配置失败尝试次数(此处,设置为5次)
egrep -q "^(#)?\s*MaxAuthTries\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*MaxAuthTries\s+.+$/MaxAuthTries 5/" /etc/ssh/sshd_config || echo "MaxAuthTries 5" >> /etc/ssh/sshd_config
# 9.配置连接空闲超时 (每120s进行心跳连接测试,若三次失败则断开链接)
egrep -q "^(#)?\s*ClientAliveInterval\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*ClientAliveInterval\s+.+$/ClientAliveInterval 120/" /etc/ssh/sshd_config || echo "ClientAliveInterval 120" >> /etc/ssh/sshd_config
egrep -q "^(#)?\s*ClientAliveCountMax\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*ClientAliveCountMax\s+.+$/ClientAliveCountMax 3/" /etc/ssh/sshd_config || echo "ClientAliveCountMax 5" >> /etc/ssh/sshd_config
# 10.不允许用户向ssh守护程序呈现环境
egrep -q "^(#)?\s*PermitUserEnvironment\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*PermitUserEnvironment\s+.+$/PermitUserEnvironment no/" /etc/ssh/sshd_config || echo "PermitUserEnvironment no" >> /etc/ssh/sshd_config
# 11.设置SSH强加密算法
egrep "^\s*Ciphers\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^\s*Ciphers\s+.+$/Ciphers aes256-ctr,aes128-ctr,aes192-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com/" /etc/ssh/sshd_config || echo "Ciphers aes256-ctr,aes128-ctr,aes192-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com" >> /etc/ssh/sshd_config
# 12.设置成功验证SSH服务器的时间为一分钟或更短
egrep -q "^(#)?\s*LoginGraceTime\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*LoginGraceTime\s+.+$/LoginGraceTime 60/" /etc/ssh/sshd_config || echo "LoginGraceTime 60" >> /etc/ssh/sshd_config
# 13.禁用X11转发及端口转发
sudo egrep -q "^(#)?\s*X11Forwarding\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*X11Forwarding\s+.+$/X11Forwarding no/" /etc/ssh/sshd_config || echo "X11Forwarding no" >> /etc/ssh/sshd_config
sudo egrep -q "^(#)?\s*X11UseLocalhost\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*X11UseLocalhost\s+.+$/X11UseLocalhost yes/" /etc/ssh/sshd_config || echo "X11UseLocalhost yes" >> /etc/ssh/sshd_config
sudo egrep -q "^(#)?\s*AllowTcpForwarding\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*AllowTcpForwarding\s+.+$/AllowTcpForwarding no/" /etc/ssh/sshd_config || echo "AllowTcpForwarding no" >> /etc/ssh/sshd_config
sudo egrep -q "^(#)?\s*AllowAgentForwarding\s+.+$" /etc/ssh/sshd_config && sed -ri "s/^(#)?\s*AllowAgentForwarding\s+.+$/AllowAgentForwarding no/" /etc/ssh/sshd_config || echo "AllowAgentForwarding no" >> /etc/ssh/sshd_config
# 14.设置SSH服务配置文件权限
chown root:root /etc/ssh/sshd_config
chmod og-rwx /etc/ssh/sshd_config
chown -R root:ssh_keys /etc/ssh/*key
chmod -R 400 /etc/ssh/*key
chown -R root:root /etc/ssh/*key.pub
chmod -R 444 /etc/ssh/*key.pub
解决: 首先修改/home/Hadoop/.ssh以及/home/Hadoop/.ssh/authorized_keys的权限;
172.16.142.4(客户端)1
2
3/home/root文件夹的权限是600
/home/root/.ssh文件夹的权限是600 (好像这个权限关系不是很大)
/home/root/.ssh/id_dsa私钥的权限600
172.16.142.5(远端主机)1
2chmod 700 /root/.ssh
chmod 644 /root/.ssh/authorized_keys #注意后面放Public-KEY的英语不要打错
问题原因:Linux修改ssh Port端口后无法启动ssh访问,发现是SELinux导致的问题;
解决办法:1
2
3
4
5
6
7
8
9#(1) 永久方法 – 需要重启服务器修改/etc/selinux/config文件中设置
SELINUX=disabled
#(2) 临时方法 – 设置系统参数然后重启服务器,使用命令setenforce 0
setenforce 1 #设置SELinux 成为enforcing模式
setenforce 0 #设置SELinux 成为permissive模式
#重启sshd服务
systemctl restart sshd
注意:
总结: 出现这种警告,我觉得最终的原因是文件夹以及文件的读写权限的问题。
Unable to negotiate with 192.168.XX.XX port XXXX: no matching key exchange method found.
错误。问题信息:1
2$ ssh-copy-id gitlab@192.168.2.3
/usr/bin/ssh-copy-id: ERROR: Unable to negotiate with 192.168.2.3 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
问题原因: 找不到匹配的密钥交换方法,需要配置为diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
解决方法:1
2
3
4vi ~/.ssh/config
host 192.168.2.3
port 22
KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
channel 1018: open failed: administratively prohibited: open failed
错误.错误信息: channel 1018: open failed: administratively prohibited: open failed
问题解决:1
2/etc/ssh/sshd_config
AllowTcpForwarding yes
你好看友,欢迎关注博主微信公众号哟! ❤
这将是我持续更新文章的动力源泉,谢谢支持!(๑′ᴗ‵๑)
温馨提示: 未解锁的用户不能粘贴复制文章内容哟!
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主,
将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!
@WeiyiGeek - 为了能到远方,脚下的每一步都不能少
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。
最后更新时间:
文章原始路径:_posts/系统运维/Application/Connect/SSH远程连接服务安装与配置.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/6-4-75.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议