SSH是目前远程管理Linux系统的首选方式,安全稳定,通信安全性明显高于ftp、telnet等。
想要使用SSH协议来远程管理Linux系统,则需要部署配置sshd服务程序。sshd提供两种安全验证的方法:
基于口令的验证—用账户和密码来验证登录;
基于密钥的验证—需要在本地生成密钥对,然后把密钥对中的公钥上传至服务器,并与服务器中的公钥进行比较;该方式相较来说更安全。
sshd服务配置文件中包含的参数以及作用:
参数 | 作用 |
---|---|
基本设置 | |
Port 22 | 默认的sshd服务端口 |
AddressFamily any | 地址家族,any表示同时监听ipv4和ipv6地址 |
ListenAddress 0.0.0.0 | 设定sshd服务器监听的IP地址 |
协议相关设置 | |
Protocol 2 | SSH协议的版本号 |
HostKey /etc/ssh/ssh_host_key | SSH协议版本为1时,DES私钥存放的位置 |
HostKey /etc/ssh/ssh_host_rsa_key | SSH协议版本为2时,RSA私钥存放的位置 |
HostKey /etc/ssh/ssh_host_ecdsa_key | SSH协议版本为2时,DSA私钥存放的位置 |
KeyRegenerationInterval 1h | 密钥生命周期 |
ServerKeyBits 1024 | 密钥长度 |
RekeyLimit default none | 密钥限制 |
SyslogFacility AUTHPRIV | 设定在记录来自sshd的消息的时候,是否给出“facility code” |
LogLevel INFO | 日志记录级别,默认为info |
LoginGraceTime 2m | 限定用户认证时间为2min |
PermitRootLogin yes | 设定是否允许root管理员直接登录 |
StrictModes yes | 当远程用户的私钥改变时直接拒绝连接 |
MaxAuthTries 6 | 最大密码尝试次数 |
MaxSessions 10 | 最大终端数 |
RSAAuthentication yes | |
公钥相关设置 | |
PubkeyAuthentication yes | 是否开启公钥验证 |
AuthorizedKeysFile .ssh/authorized_keys | 公钥验证文件路径 |
AuthorizedPrincipalsFile none | |
AuthorizedKeysCommand none | |
AuthorizedKeysCommandUser nobody | |
RhostsRSAAuthentication no | |
HostbasedAuthentication no | 指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时,是否进行反向域名查询 |
IgnoreUserKnownHosts no | 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件 |
IgnoreRhosts yes | 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件 |
PasswordAuthentication yes | 是否允许密码验证,生产环境中建议改成no,只用密钥登录 |
PermitEmptyPasswords no | 是否允许空密码登录(很不安全) |
ChallengeResponseAuthentication no | 是否允许质疑-应答(challenge-response)认证 |
Kerberos认证相关 | |
KerberosAuthentication no | 是否使用Kerberos认证 |
KerberosOrLocalPasswd yes | 如果 Kerberos 密码认证失败,那么该密码还将要通过其它的认证机制(比如 /etc/passwd) |
KerberosTicketCleanup yes | 是否在用户退出登录后自动销毁用户的 ticket |
KerberosGetAFSToken no | 如果使用了AFS并且该用户有一个 Kerberos 5 TGT,那么开启该指令后,将会在访问用户的家目录前尝试获取一个AFS token |
KerberosUseKuserok yes | |
GSSAPI认证相关 | |
GSSAPIAuthentication yes | 是否允许基于GSSAPI的用户认证 |
GSSAPICleanupCredentials yes | 是否在用户退出登录后自动销毁用户凭证缓存 |
GSSAPIStrictAcceptorCheck yes | |
GSSAPIKeyExchange no | |
PAM认证相关 | |
UsePAM yes | 是否使用PAM验证 |
AllowAgentForwarding yes | |
AllowTcpForwarding yes | |
GatewayPorts no | 是否允许远程主机连接本地的转发端口 |
X11Forwarding yes | 是否允许X11转发 |
X11DisplayOffset 10 | 指定sshd(8)X11转发的第一个可用的显示区(display)数字。默认值是10 |
X11UseLocalhost yes | 是否应当将X11转发服务器绑定到本地loopback地址 |
PrintMotd yes | 指定sshd(8)是否在每一次交互式登录时打印 /etc/motd 文件的内容 |
PrintLastLog yes | 指定sshd(8)是否在每一次交互式登录时打印最后一位用户的登录时间 |
TCPKeepAlive yes | 指定系统是否向客户端发送 TCP keepalive 消息 |
UseLogin no | 是否在交互式会话的登录过程中使用 login(1) |
UsePrivilegeSeparation sandbox | 是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离 |
PermitUserEnvironment no | 指定是否允许sshd(8)处理~/.ssh/environment以及 ~/.ssh/authorized_keys中的 environment= 选项 |
Compression delayed | 是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密 |
ClientAliveInterval 0 | sshd(8)长时间没有收到客户端的任何数据,不发送”alive”消息 |
ClientAliveCountMax 3 | sshd(8)在未收到任何客户端回应前最多允许发送多个”alive”消息,默认值是 3 |
ShowPatchLevel no | |
UseDNS yes | 是否使用dns反向解析 |
PidFile /var/run/sshd.pid | 指定存放SSH守护进程的进程号的路径 |
MaxStartups 10:30:100 | 最大允许保持多少个未认证的连接 |
PermitTunnel no | 是否允许tun(4)设备转发 |
ChrootDirectory none | |
VersionAddendum none | |
Banner none | 将这个指令指定的文件中的内容在用户进行认证前显示给远程用户,默认什么内容也不显示,”none”表示禁用这个特性 |
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES | |
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT | |
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE | |
AcceptEnv XMODIFIERS | |
Subsystem sftp /usr/libexec/openssh/sftp-server | 配置一个外部子系统sftp及其路径 |
Host .local | |
CheckHostIP no | |
X11Forwarding no | |
AllowTcpForwarding no | |
ForceCommand cvs server |
口令验证
linux & win
ssh [参数] 主机IP地址
exit
安全密钥验证
linux & win
- 1 在客户端主机中生成“密钥对”,设置密钥的存储路径和密码。
ssh-keygen
- 2 把客户端主机中生成的公钥文件传送至远程主机。
ssh-copy-id XXX.XXX.XXX.XXX
- 3 对服务器进行设置,使其只允许密钥验证,拒绝传统的口令验证方式。记得在修改配置文件后保存并重启sshd服务程序。
vim /etc/ssh/sshd_config
PasswordAuthentication no</pre>
- 4 在客户端尝试登录到服务器,此时无须输入密码也可成功登录。
发表评论