SSH使用指南

SSH是一种网络协议,用于计算机之间的加密登录。

基本使用

使用账号test_user登录远程主机host

ssh test_user@host
# 或者
ssh -l test_user host

SSH默认使用端口号22,如果更改过远程主机的SSH服务端口号,那么在登录时应该指定端口号

ssh -p 2222 test_user@host

使用公钥方式登录

ssh -i private_key_file test_user@host

SSH隧道

SSH隧道是将另外一种网络协议通过SSH转发,又称为SSH端口转发。SSH隧道有三种类型:动态端口转发(Socks代理)、本地端口转发、远程端口转发。SSH隧道需要在登录的同时建立,登录成功后不能再建立SSH隧道。

动态端口转发

SSH动态端口转发应用如上。将本地应用请求转发到远程主机执行,远程主机再将请求的结果返回给本地应用。

ssh -D [bind_address:]7070 test_user@host

bind_address默认为localhost,如果要支持其他计算机通过本机的7070端口进行转发,那么要将bind_address设为0.0.0.0,或者使用-g选项。

如果登陆成功后就被强制退出,那是因为SSH服务器禁止账号登录请求Shell终端,不能执行远程命令。使用选项-N来解决问题。

# -N:不执行远程命令
ssh -N -D 7070 test_user@host

如果只想使用SSH隧道,不需要登陆远程主机进行操作,可以使用后台运行选项-f

SSH隔一段时间没操作,服务端会自动关闭这个连接。会出现如下错误

Write failed: Broken pipe

可以通过每隔一段时间发送保持活动状态消息来保持连接。

ssh -Nf -o ServerAliveInterval=60 -D 7070 test_user@host

本地端口转发

将远程主机能够访问到的地址和端口映射为本地的端口。

使用命令

ssh -L [bind_address:]port:other-host:other-host-port test_user@host

bind_address通动态端口转发,other-host也可以就是SSH登录的远程主机host。这种方法相对于动态端口转发在于无需设置代理,但是每个应用需要使用的端口都需要单独配置转发。

远程端口转发

远程端口转发应用与某些单向阻隔的网络环境,比如我们不能SSH登录远程主机,但是从远程主机可以SSH登录我们本机(这时本机是SSH服务端),当SSH登录本机时,可以建立一个远程端口转发,将本机的某个端口绑定到远程主机内网中某台机器的端口,实现从本机访问远程主机内网的应用。

使用命令

ssh -R [bind_address:]port:other-host:other-host-port test_user@host

远程操作

SSH不仅可以进行远程主机登录,还可以直接在远程主机上执行操作。

$HOME/src/目录下所有文件复制到远程主机的$HOME/src目录

cd && tar czv src | ssh test_user@host 'tar xz'

将远程主机$HOME/src目录下所有文件复制到本机用户当前目录

ssh test_user@host 'tar cz src' | tar xzv

使用配置文件

使用~/.ssh/config配置文件能够极大地方便我们使用SSH。编辑~/.ssh/config;如果不存在,就创建该文件。

# 密码方式
Host dev
HostName dev.example.com
Port 22000
User fooey

配置后,我们可以直接在Shell中使用ssh dev进行登录操作。

其他操作配置

# 公钥方式
Host github-project1
User git
HostName github.com
IdentityFile ~/.ssh/github.project1.key
# 本地端口转发
LocalForward 9906 127.0.0.1:3306
Host github-test1
User git
HostName github.com
# 远程端口转发
RemoteForward 9906 192.168.1.10:3306
Host github.com
User git
IdentityFile ~/.ssh/github.key
# 动态端口转发
DynamicForward 7070
# 每隔60秒发送消息保持活动状态
ServerAliveInterval 60

远程主机SSH服务配置

1. 生成公钥登录需要的秘钥

ssh-keygen

2. 配置公钥登录方式

将公钥添加到远程主机~/.ssh/authorized_keys文件中,并将authorized_keys权限设为600。推荐使用ssh-copy-id命令来上传公钥。

ssh-copy-id -i pub_key_file [-p port] test_user@host

部署成功后,使用下面命令测试登录

ssh -i private_key [-p port] test_user@host

3. 禁止密码登录

配置好公钥登录方式后,可以禁止密码登录,防止暴力破解攻击。编辑/etc/ssh/sshd_config配置文件

PasswordAuthentication no
ChallengeResponseAuthentication no

参考

  1. SSH原理与运用(一):远程登录
  2. 使用配置文件简化SSH操作
  3. SSH动态端口转发
  4. SSH隧道使用: 12
  5. SSH配置文件说明