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
|
服务器端:
/etc/ssh/sshd_config
客户端:
/etc/ssh/ssh_config
1.限制root用户远程登录
# vi /etc/ssh/sshd_config
PermitRootLogin no
2.通过控制用户访问限制 SSH 访问
# vi /etc/ssh/sshd_config
AllowUsers fsmythe bnice swilson
DenyUsers jhacker joebadguy jripper
3.
# vi /etc/ssh/sshd_config
Protocol 2
4.不要支持闲置会话,并配置 Idle Log Out Timeout 间隔:
#当客户端连上服务器端后,若没有任何操作则,服务器端默认会
#每隔一定时间发送一个alive消息给客户端寻求客户端应答,
#默认一共发三次.若都没有回应,则断开连其中
#ClientAliveInterval设置每隔多少秒发送一次alive消息
#ClientAliveCountMax 设置一共发多少次.
# vi /etc/ssh/sshd_config
ClientAliveInterval 600
# (Set to 600 seconds = 10 minutes)
ClientAliveCountMax 0
5.禁用基于主机的身份验证:(这种认证方式是不安全的)
# vi /etc/ssh/sshd_config
HostbasedAuthentication no
6.使用 Chroot SSHD 将 SFTP 用户局限于其自己的主目录
# vi /etc/ssh/sshd_config
ChrootDirectory
/home/
%u
7.禁用空密码:
# vi /etc/ssh/sshd_config
PermitEmptyPasswords no
8.指令压缩
Compression {
yes
|no|delayed}
#默认是delayed 意思就是等到用户认证结束后再对数据进行压缩
9.设置日志级别
#LogLevel INFO 默认是INFO级别,调试的时候可以选择DEBUG
#级别,这样调试信息更加详细
10.支持图形界面操作
X11Forwarding
yes
#对Xwindows的数据进行转发,开启该项并使用xshell程序远程登
#录服务器是可以打开图形界面程序
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
PrintMotd no
# 登入后是否显示出一些信息呢?例如上次登入的时间、地点等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
PrintLastLog
yes
# 显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive
yes
# 一般而言,如果设定这项目的话,那么 SSH Server 会传送
# KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
# 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会
# 有僵尸程序的发生!
Banner
/to/somefile
# 指定在用户完成认证前输出到终端的信息
GSSAPIAuthentication no
#指定是否使用基于GSSAPI的用户认证默认为no
MaxAuthTries 默认值为6
#每一个链接最多尝试验证的次数为这个值得一半,此外失败的信息还会记录在/var/log/message
UseDNS
yes
#是否对主机名进行dns解析(常用与没有固定IP只有域名的场合)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@wwww ~]
# ssh-keygen -t rsa -b 4096
#-t 指定生成密钥的算法 -b指定密钥的位数
Generating public
/private
rsa key pair.
Enter
file
in
which
to save the key (
/root/
.
ssh
/id_rsa
):
#询问生成的密钥放在的位置,默认放在家目录下的.ssh目录
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:
e7:60:45:fe:d8:09:24:c1:1e:ef:35:cc:c1:c3:24:e4 [email protected]
#生成的指纹信息
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@wwww ~]
# scp ~/.ssh/id_rsa.pub [email protected]:~/
The authenticity of host
'192.168.157.132 (192.168.157.132)'
can't be established.
RSA key fingerprint is 6e:0f:f8:f8:c7:c2:11:e6:4d:99:aa:16:6a:81:4a:02.
Are you sure you want to
continue
connecting (
yes
/no
)?
yes
Warning: Permanently added
'192.168.157.132'
(RSA) to the list of known hosts.
[email protected]'s password:
id_rsa.pub 100% 740 0.7KB
/s
00:00
然后远程连接到远程主机进行设置:
[root@wwww ~]
# ssh [email protected]
[email protected]'s password:
Last login: Sat Jan 18 21:16:49 2014 from 192.168.157.128
[root@bogon ~]
# mkdir .ssh
#这个目录默认不存在,但是这太机子若连接过其他服务器就会自动生成.ssh目录用来保存known_hosts文件
[root@bogon ~]
# chmod 700 .ssh
#这个权限很重要,设置不对的话是没法通过验证
[root@bogon ~]
# cat id_rsa.pub >> ~/.ssh/authorized_keys
#这里最好每次都是以>>追加的形式输出,不然会覆盖其他主机的公钥
[root@bogon ~]
# chmod 600 ~/.ssh/authorized_keys
#修改权限放在其他用户修改查看
到此配置完成
|
1
2
3
4
5
6
|
[root@wwww ~]
# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[email protected]'s password:
.
ssh
/authorized_keys
to
make
sure we haven
't added extra keys that you weren'
t expecting.
#直接通过命令完成.推荐使用,但是并不是每台机器上都会装有这个命令.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/usr/bin/expect
#author Jeff_linux
#Time 2014-01-18
set
local_passwd
"server"
set
des_passwd
"server"
set
timeout 10
set
localip
"192.168.0.254"
set
desip
"192.168.0.251"
spawn
ssh
-keygen -t rsa -b 4096 -f ~/.
ssh
/id_rsa
-P
""
spawn
ssh
-copy-
id
-i
/root/
.
ssh
/id_rsa
.pub root@$desip
expect {
"yes/no"
{ send
"yes\r"
;exp_continue}
"password:"
{send
"$des_passwd\r"
;exp_continue}
}
spawn
ssh
$desip
"ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -P \"\""
spawn
scp
$desip:
/root/
.
ssh
/id_rsa
.pub
/root/
.
ssh
/authorized_keys
expect {
"yes/no"
{ send
"yes\r"
;exp_continue}
"password:"
{send
"$local_passwd\r"
;exp_continue}
}
|