Linux网络命令之ssh

一、基础

1
2
3
4
5
6
7
8
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-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]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]

主要参数说明:

-l 指定登入用户
-p 设置端口号
-f 后台运行,并推荐加上 -n 参数
-n 将标准输入重定向到 /dev/null,防止读取标准输入
-N 不执行远程命令,只做端口转发
-q 安静模式,忽略一切对话和错误提示
-T 禁用伪终端配置

二、常用案例

2.1 远程执行bash命令

ssh -l www-online 192.168.110.34 “cat /proc/cpuinfo”

不过一般执行后,可以写这样的语句来判断执行有无异常

ssh 调用远程命令后不能自动退出解决方法
可以将标准输出与标准错误输出重定向到/dev/null,这样就不会一直处于等待状态。

ssh -l www-online 192.168.110.34 “/home/www-online/uptimelog.sh > /dev/null 2>&1 &”

实际上,想ssh退出,我们可以在ssh执行完成后kill掉ssh这个进程来实现。
首先,创建一个sh执行ssh的命令,这里需要用到ssh的 -f 与 -n 参数,因为我们需要ssh也以后台方式运行,这样才可以获取到进程号进行kill操作。
创建ssh_uptimelog.sh,脚本如下

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
ssh -f -n -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh &" # 后台运行ssh
pid=$(ps aux | grep "ssh -f -n -l www-online 192.168.110.34 /home/www-online/uptimelog.sh" | awk '{print $2}' | sort -n | head -n 1) # 获取进程号
echo "ssh command is running, pid:${pid}"
sleep 3 && kill ${pid} && echo "ssh command is complete" # 延迟3秒后执行kill命令,关闭ssh进程,延迟时间可以根据调用的命令不同调整
exit 0

三、SSH配置修改

1
2
// 常用配置
PermitRootLogin yes # 是否开启root登陆

3.1 加速ssh登陆

ssh默认开启GSSAPIAuthentication登陆验证,将其设置为no就可以了,配置文件在/etc/ssh/ssh_config,修改重启sshd即可

说明如:

GSSAPI:Generic Security Services Application Program Interface,GSSAPI 本身是一套 API,由 IETF 标准化。
其最主要也是著名的实现是基于 Kerberos 的。一般说到 GSSAPI 都暗指 Kerberos 实现。
GSSAPI 是一套通用网络安全系统接口。该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同,降低编程难度。

3.2 开启ssh免密码登陆

设置内容:
vi /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

1
2
3
4
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
service sshd restart

重启sshd后尝试使用无密码登陆服务器。

可能遇到问题:selinux未关闭,依然需要输入密码。处理方法,配置关闭selinux:
vi /etc/selinux/config
修改以下内容:
SELINUX=enforcing修改为SELINUX=disabled