ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。
语法
ssh(选项)(参数)
选项
-1:强制使用ssh协议版本1; -2:强制使用ssh协议版本2;
-4:强制使用IPv4地址; -6:强制使用IPv6地址;
-p:指定远程服务器上的端口; -b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据 -f:后台执行ssh指令;
-l:指定连接远程服务器登录用户名; -g:允许远程主机连接主机的转发端口;
-F:指定ssh指令的配置文件; -i:指定身份文件;
-N:不执行远程指令; -o:指定配置选项;
-q:静默模式; -X:开启X11转发功能;
-x:关闭X11转发功能; -y:开启信任X11转发功能。
-A:开启认证代理连接转发功能; -a:关闭认证代理连接转发功能;
参数
远程主机:指定要连接的远程ssh服务器;
指令:要在远程ssh服务器上执行的指令。
ssh使用
1、查看SSH客户端版本
有的时候需要确认一下SSH客户端及其相应的版本号。使用ssh -V命令可以得到版本号。需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用OpenSSH:
# ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013
2、连接到远程主机:
# hostname
lianxi
# ssh 192.168.120.135
The authenticity of host '192.168.120.135 (192.168.120.135)' can't be established.
ECDSA key fingerprint is a1:54:24:18:77:01:db:c7:8c:ac:de:8f:c4:81:01:7a.
Are you sure you want to continue connecting (yes/no)? yes
第一次连接目标主机时,ssh 会让你确认目标主机的真实性。如果你回答的是 NO,SSH 将不会继续连接,只有回答 Yes才会继续。
Warning: Permanently added '192.168.120.135' (ECDSA) to the list of known hosts.
root@192.168.120.135's password:
Last failed login: Mon Apr 10 13:54:09 CST 2017 from :0 on :0
There was 1 failed login attempt since the last successful login.
Last login: Mon Apr 10 13:08:44 2017
# hostname
nisserver
# exit
登出
Connection to 192.168.120.135 closed.
# ssh root@192.168.120.120
root@192.168.120.120's password:
Last login: Tue Apr 11 14:00:20 2017 from 192.168.120.120
# hostname
lianxi
# exit
登出
Connection to 192.168.120.120 closed.
# hostname
shiyan
# hostname
shiyan
# ssh 192.168.120.120 -l root
root@192.168.120.120's password:
Last login: Tue Apr 11 14:02:34 2017 from 192.168.120.114
# hostname
lianxi
说明:以上两种方式都可以远程登录到远程主机,server代表远程主机,name为登录远程主机的用户名。
# hostname
lianxi
# ssh 192.168.120.135
The authenticity of host '192.168.120.135 (192.168.120.135)' can't be established.
ECDSA key fingerprint is a1:54:24:18:77:01:db:c7:8c:ac:de:8f:c4:81:01:7a.
Are you sure you want to continue connecting (yes/no)? yes
第一次连接目标主机时,ssh 会让你确认目标主机的真实性。如果你回答的是 NO,SSH 将不会继续连接,只有回答 Yes才会继续。
Warning: Permanently added '192.168.120.135' (ECDSA) to the list of known hosts.
root@192.168.120.135's password:
Last failed login: Mon Apr 10 13:54:09 CST 2017 from :0 on :0
There was 1 failed login attempt since the last successful login.
Last login: Mon Apr 10 13:08:44 2017
# hostname
nisserver
# exit
登出
Connection to 192.168.120.135 closed.
3、连接到远程主机指定的端口:
# ssh root@192.168.120.120 -p 6222
ssh 192.168.120.120 -l root -p 6222
说明:p 参数指定端口号,通常在路由里做端口映射时,我们不会把22端口直接映射出去,而是转换成其他端口号,这时就需要使用-p端口号命令格式。
要改变端口号,我们需要修改 /etc/ssh/ssh_config 文件,找到此行:
Port 22
把它换成其他的端口号,比如上面示例的 6222 端口,然后重启 SSH 服务。
4、通过远程主机1跳到远程主机2:
# ssh -t 192.168.120.120 ssh 192.168.120.135
root@192.168.120.120's password:
root@192.168.120.135's password:
Last login: Tue Apr 11 14:16:45 2017 from 192.168.120.120
# hostname
nisserver
# exit
登出
Connection to 192.168.120.135 closed.
Connection to 192.168.120.120 closed.
# hostname
shiyan
说明:当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。
5、通过SSH运行远程shell命令:
[root@lianxi ~]# ls /root/
anaconda-ks.cfg RPM-GPG-KEY.art.txt RPM-GPG-KEY.atomicorp.txt
[root@shiyan ~]# ssh -l root 192.168.120.120 ls /root/
root@192.168.120.120's password:
anaconda-ks.cfg
RPM-GPG-KEY.art.txt
RPM-GPG-KEY.atomicorp.txt
[root@lianxi ~]# ls /root/ && ls /etc/selinux/
anaconda-ks.cfg RPM-GPG-KEY.art.txt RPM-GPG-KEY.atomicorp.txt
config semanage.conf targeted
[root@shiyan ~]# ssh -l root 192.168.120.120 "ls /root/ && ls /etc/selinux"
root@192.168.120.120's password:
anaconda-ks.cfg
RPM-GPG-KEY.art.txt
RPM-GPG-KEY.atomicorp.txt
config
semanage.conf
targeted
说明:连接到远程主机,并执行远程主机的command命令
对所有数据请求压缩
有了这个选项,所有通过 SSH 发送或接收的数据将会被压缩,并且任然是加密的。要使用 SSH 的压缩功能,使用 -C 选项。
# ssh -C 192.168.120.135
如果你的连网速度很慢的话,使用的是像 LAN 或其它更高级网络的话,压缩反而会降低你的传输速度。可以使用 -o 选项加上压缩级别参数来控制压缩的级别,但这个选项仅仅只在 SSH-1 下起作用。
绑定源地址
如果你的客户端有多于两个以上的 IP 地址,你就不可能分得清楚在使用哪一个 IP 连接到 SSH 服务器。
我们可以使用 -b 选项来指定一个IP 地址。这个 IP 将会被使用做建立连接的源地址。
# ssh -b 192.168.0.200 -l leni 192.168.0.103
使用其他配置文件
要使用指定的配置文件,可以使用 -F 选项。
# ssh -F /home/pungki/my_ssh_config 192.168.0.101
打开调试模式
因为某些原因,我们想要追踪调试我们建立的 SSH 连接情况。SSH 提供的 -v 选项参数正是为此而设的。
# ssh -v 192.168.120.135
OpenSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Connecting to 192.168.120.135 [192.168.120.135] port 22.
debug1: Connection established.
... ...
root@192.168.120.135's password:
ssh-keygen命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。
语法
ssh-keygen(选项)
选项
-b:指定密钥长度; -e:读取openssh的私钥或者公钥文件;
-C:添加注释; -f:指定用来保存密钥的文件名;
-l:显示公钥文件的指纹数据; -i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-N:提供一个新密语; -P:提供(旧)密语;
-q:静默模式; -t:指定要创建的密钥类型。
# ssh-keygen -t rsa
ssh-copy-id命令
可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。 语法
ssh-copy-id [-i [identity_file]] [user@]machine
选项
-i:指定公钥文件
实例
1、把本地的ssh公钥文件安装到远程主机对应的账户下:
ssh-copy-id user@server
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。该命令位置在/usr/bin/ssh-add。
语法
ssh-add [-cDdLlXx] [-t life] [file ...]
ssh-add -s pkcs11
ssh-add -e pkcs11
选项
-D:删除ssh-agent中的所有密钥. -d:从ssh-agent中的删除密钥
-e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙。 -s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙。
-L:显示ssh-agent中的公钥 -l:显示ssh-agent中的密钥
-t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥 -X:对ssh-agent进行解锁
-x:对ssh-agent进行加锁
实例
1、把专用密钥添加到 ssh-agent 的高速缓存中:
ssh-add ~/.ssh/id_dsa
2、从ssh-agent中删除密钥:
ssh-add -d ~/.ssh/id_xxx.pub
3、查看ssh-agent中的密钥:
ssh-add -l
sftp-server命令
是一个“sftp”协议的服务器端程序,它使用加密的方式进行文件传输。
sftp-server - SFTP 服务器子系统
语法
sftp-server [-f log_facility] [-l log_level]
描述
sftp-server 是一个 SFTP 协议的服务端程序,它要求客户端从 stdin 发起请求,并将应答发送到 stdout 。
一般不直接调用 sftp-server ,而是通过sshd配置文件中的 Subsystem 指令调用。
sftp-server 的命令行选项应当在 sshd 配置文件中的 Subsystem 指令中设置。
ssh-agent命令
是一种控制用来保存公钥身份验证所使用的私钥的程序。ssh-agent在X会话或登录会话之初启动,所有其他窗口或程序则以客户端程序的身份启动并加入到ssh-agent程序中。通过使用环境变量,可定位代理并在登录到其他使用ssh机器上时使用代理自动进行身份验证。
其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。
语法
ssh-agent [-c | -s] [-d] [-a bind_address] [-t life] [command [arg ...]] ssh-agent [-c | -s] -k
选项
-a bind_address:bind the agent to the UNIX-domain socket bind_address.
-c:生成C-shell风格的命令输出。
-d:调试模式。
-k:把ssh-agent进程杀掉。
-s:生成Bourne shell 风格的命令输出。
-t life:设置默认值添加到代理人的身份最大寿命。
实例:
运行ssh-agent,它会打印出来它使用的环境和变量。
# ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-SeBuaIs1LFwc/agent.11523; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11524; export SSH_AGENT_PID;
echo Agent pid 11524;
sshd命令
是openssh软件套件中的服务器守护进程。
语法
sshd(选项)
选项
-4:强制使用IPv4地址; -6:强制使用IPv6地址;
-D:以后台守护进程方式运行服务器; -d:调试模式;
-f:指定服务器的配置文件; -e:将错误发送到标准错误设备,而不是将其发送到系统日志;
-h:指定读取主机key文件; -g:指定客户端登录时的过期时间,如果在此期限内,用户没有正确认证,则服务器断开次客户端的连接;
-i:ssh以inetd方式运行; -o:指定ssh的配置选项;
-p:静默模式,没有任何信息写入日志; -t:测试模式。
ssh-keyscan命令
是一个收集大量主机公钥的使用工具。
语法
ssh-keyscan(选项)(参数)
选项
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-f:从指定文件中读取“地址列表/名字列表”;
-p:指定连接远程主机的端口;
-T:指定连接尝试的超时时间;
-t:指定要创建的密钥类型;
-v:信息模式,打印调试信息。
参数
主机列表:指定要收集公钥的主机列表。
sftp命令
是一款交互式的文件传输程序,命令的运行和使用方式与ftp命令相似,但是,sftp命令对传输的所有信息使用ssh加密,它还支持公钥认证和压缩等功能。
语法
sftp(选项)(参数)
选项
-B:指定传输文件时缓冲区的大小;
-l:使用ssh协议版本1;
-b:指定批处理文件;
-C:使用压缩;
-o:指定ssh选项;
-F:指定ssh配置文件;
-R:指定一次可以容忍多少请求数;
-v:升高日志等级。
参数
目标主机:指定sftp服务器ip地址或者主机名。