本文内容结构为:
- ssh英文手册的主要部分翻译
- ssh的实际用例以及连接限制配置
原英文手册可在Linux命令行执行命令 man ssh
名称
ssh — OpenSSH SSH客户端(远程登陆程序)
使用ssh -V命令可以得到版本号。需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用OpenSSH:
$ ssh -V
OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003
下面的例子表明该系统正在使用SSH2:
$ ssh -V
ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu
摘要
ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile]
[-I pkcs11] [-i identity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q cipher | cipher-auth | mac | kex | key]
[-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] [user@]hostname [command]
描述
ssh (SSH客户端)是一个登陆远程机器并执行命令的程序,它是为了替代rlogin和rsh在两台互信主机之间的不安全网络中提供安全加密通信而设计出来的
X11连接和任意tcp端口也能够在安全通道之间转发
ssh连接并登陆特定主机(通过用户名).用户必须提供验证信息(取决于协议版本)去登陆主机 The
如果命令被明确指出,那么它将被在远程主机中执行而不是登陆SHELL中
登陆信息选项如下:
-1 强制ssh使用协议版本1登陆
-2 强制ssh只尝试用协议版本2登陆
-4 强制ssh只使用ipv4登陆
-6 强制ssh只使用ipv6登陆
-A 允许认真代理的转发机制(也可以在每一个主机系统的配置文件中明确指出)。代理转发要小心使用
在远程主机上有文件许可权限的用户(对于代理的UNIX-domain套接口)能够通过连接转发访问本地代理。攻击者能够通过代理获取密钥文件,而且攻击者能够在密钥下执行操作使得自己使用代理加载的认证信息进行验证
-a 拒绝认证代理的连接
-b bind_address
在本地机器上使用绑定地址作为连接的源地址(只在拥有多个地址的系统中有效)
-C 请求所有传输数据的压缩(包括标准输入、输出、错误输出、X11转发的数据和TCP连接)
-c cipher_spec
选择明确的密码加密会话
-D [bind_address:]port
明确指出一个本地的动态 应用级别端口转发
-E log_file
将debug日至附加到日志文件而不是显示到标准错误输出
-e escape_char
对使用pty的会话设置一个退出字符
-F configfile
指明可选用户的配置文件
-f 在命令执行前请求ssh到后台执行
-g 允许远程主机连接本地转发端口
-I pkcs11
指定ssh要用来通信的PKCS#11 token提供用户私有RSA密钥的PKCS#11分享库
-i identity_file
选择一个文件用来获取认证(私有密钥的)公钥
-K 允许GSSAPI-based认证和为GSSAPI转发提供服务器证明
-k 拒绝服务器的GSSAPI转发认证
-L [bind_address:]port:host:hostport
给需要连接的远程一侧主机指明本地机器上的给定转发端口
-l login_name
指明需要登陆远程主机的用户名称
-M 为连接分享设置ssh客户端为master模式
-N 不要执行远程命令(只对转发端口有效,针对第二个协议版本)
-n 从/dev/null重定向标准输入
-O ctl_cmd
控制一个活跃的连接为多元主进程
-o option
以给定格式的参数使用配置文件
选项与跟随的值如下
AddressFamily
BatchMode
BindAddress
CanonicalDomains
CanonicalizeFallbackLocal
...
VerifyHostKeyDNS
VisualHostKey
XAuthLocation
-p port
指定连接远程主机的端口,也可以在配置文件中指明
-Q cipher | cipher-auth | mac | kex | key
查询ssh支持的算法(针对协议版本2)
-R [bind_address:]port:host:hostport
指明远程主机的给定转发端口和本地一侧的端口
-S ctl_path
指明连接分享的控制接口位置或者字符串“none”关闭连接分享
-s 用来请求调用远程主机的子系统
-T 关闭pseudo-tty分配
-t 强制pseudo-tty分配开启
-v 长模式
-W host:port
在客户端上请求标准输入输出通过安全通道转发到主机
-w local_tun[:remote_tun]
请求通道设备用指定的tun在客户端和主机之间转发
-X 允许X11转发(可以在每一个客户端中的配置文件中指定)
-x 拒绝X11转发
-Y 开启信任的X11转发.
-y 使用syslog(3)系统发送日志信息Send log information using the syslog(3) system module. By default this
information is sent to stderr.
ssh能够从每一个用户的配置文件和系统侧配置文件获取额外配置信息.
ssh 远程主机用户@远程主机ip -X
##调用远程主机图形工具
ssh 远程主机用户@远程主机ip command
##直接在远程主机运行某条命令
示例:
注意:
连接前请确认主机可达性和端口可用性
1、 最简单的远程连接
[root@foundation36 Desktop]# ssh root@172.25.254.x
#执行连接命令
root@172.25.254.x's password:
#需要输入所要连接的远程主机下指定用户的密码
Last login: Wed Jul 19 15:03:27 2017 from 172.25.254.36
ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1500447808
#连接成功
[root@foundationx ~]# ls
#现在已经成功登陆,特征为[root@foundation36 Desktop]变为了[root@foundationx ~]
anaconda-ks.cfg foundation-config-post.log rht-ks-post.log rht-ks-pre.log
[root@foundationx ~]#
2、临时回到本地主机
输入退出符号:“~”与“Control-Z”组合。
当你输入“~”你不会立即在屏幕上看到,当你按下<Control-Z>并且按回车之后才一起显示。如下,在远程主机中以此输入“~<Control-Z>”
remotehost$ ~^Z
[1]+ Stopped ssh -l jsmith remotehost
localhost$
3、回到了本地主机,ssh远程客户端会话就在UNIX后台中运行,你可以像下面那样查看它:
localhost$ jobs
[1]+ Stopped ssh -l jsmith remotehost
4、 你可以将后台运行的ssh会话进程切换到前台,重新回到远程主机,而无需输入密码
localhost$ fg %1
ssh -l jsmith remotehost
remotehost$
服务相关
查看sshd服务状态:
systemctl status sshd
开启服务
systemctl start sshd
关闭服务
systemctl stop sshd
重启服务
systemctl restart sshd
ssh连接的高级配置
sshkey加密
1.生成公钥私钥
root@ubuntu:~# ssh-keygen ##生成公钥私钥工具,无需输入任何信息,一直回车直到命令结束
root@ubuntu:~# ls /root/.ssh/
id_rsa id_rsa.pub
id_rsa ##私钥,就是钥匙
id_rsa.pub ##公钥,就是锁
2.添加key认证方式
root@ubuntu:~# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.0.11
ssh-copy-id ##添加key认证方式的工具
-i ##指定加密key文件
/root/.ssh/id_rsa.pub ##加密key
root ##加密用户为root
172.25.0.11 ##被加密主机ip
3.分发钥匙给client主机
root@ubuntu:~# scp /root/.ssh/id_rsa root@172.25.0.10:/root/.ssh/
4.提升openssh的安全级别
通过修改openssh-server配置文件,我们可以设定更多的登录限制
root@ubuntu:~# vim /etc/ssh/sshd_config
可添加或者修改的常用设置有以下几条
PasswordAuthentication yes|no
##是否开启用户密码认证,yes为支持no为关闭
PermitRootLogin yes|no
##是否允许超级用户登陆
AllowUsers student admin
##用户白名单,只有在名单中出现的用户可以使用sshd建立shell
DenyUsers guest
##用户黑名单
AllowGroups root halo
##允许属于root和halo组的用户可以登录
Match参数的用法
下例中public 组中的所有用户和以 test 开头的所有用户名都不能使用 TCP 转发:
## sshd_config file
## Global settings
# Example (reflects default settings):
#
# Host *
# ForwardAgent no
# ForwardX11 no
# PubkeyAuthentication yes
# PasswordAuthentication yes
# FallBackToRsh no
# UseRsh no
# BatchMode no
# CheckHostIP yes
# StrictHostKeyChecking ask
# EscapeChar ~
Match Group public
AllowTcpForwarding no
Match User test*
AllowTcpForwarding no
通过hosts文件设置sshd 允许/禁止 的主机连接
vim /etc/hosts.deny
#在文本最后添加以下内容,表示拒绝所有主机的sshd连接
sshd:ALL
vim /etc/hosts.allow
#在文本最后添加以下内容,表示允许ssh连接的主机
sshd:ip, ip, ip ,...
sshd:ALL EXCEPT IP
##在上边两个文件中都可以以上面的方式设置除了某个主机之外其他主机拒绝或者允许ssh连接访问
##设置客户端ssh登陆后的提示信息,可以在这个文件中编写你想要在用户登录成功后显示的提示:
vim /etc/motd
用户登陆审记(可用来查看哪些主机登录过系统)
w ##查看使用系统的当前用户有那些
w -f ##-f查看使用地点
last ##查看用户登陆成功历史
lastb ##查看用户登陆未成功历史