如题。本文讲述 SSH 的安装、设置、文件传输、端口转发的应用。通过 SSH 上传下载文件、内网穿透、访问防火墙后的服务、科学上网方法等。
本文基于 Ubuntu 16.04 LTS。
0x00 - 安装 SSH
Ubuntu 默认是附带 SSH 的。如果因为种种原因没有,请运行如下安装:
$ sudo apt-get install ssh
ssh 包包括了 openssh-server 与 openssh-client。
0x01 - 配置 SSH Daemon
SSH 设置的稍微安全一点总是好的:
a. 本地生成一对钥匙
如果本地已设置过 ssh key 请跳下段。
本地运行生成一对钥匙
$ ssh-keygen
默认你的私钥存在 ~/.ssh/id_rsa
公钥存在 ~/.ssh/id_rsa.pub
。
b. 上传公钥
本地新开一个 terminal 上传公钥:
$ cat ~/.ssh/id_rsa.pub | ssh whale@do-whale.whe.me 'mkdir -p ~/.ssh; cat - >> ~/.ssh/authorized_keys'
c. 配置 sshd_config
$ sudo nano /etc/ssh/sshd_config
确保以下没有 # prefix 并被赋有正确的值:
Port 1234
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
如果要支持 IPv6 请确保以下设置正确:
AddressFamily any
ListenAddress ::
ListenAddress 0.0.0.0
接着就 sshd
设置重载:
$ sudo systemctl reload sshd
d. 用新配置连接 ssh
本地新开 terminal 窗口运行:
$ ssh -p 1234 whale@do-whale.whe.me
是不是不需密码就登录了呐!
如果使用了防火墙,请开启端口,UFW 版本详见「0x04 - 配置防火墙(UFW 简易墙) | 全新 Ubuntu VPS 配置」。
0x02 - 文件传输
SSH 文件传输简易版:
$ cat ~/.bash_aliases | ssh -p 1234 whale@do-whale.whe.me 'cat - >> ~/.bash_aliases'
或者使用 scp
传输 -P
为大写:
SCP 上传
$ scp -P 1234 ~/.bash_aliases whale@do-whale.whe.me:~/
-r
支持文件夹:
$ scp -P 1234 -r ~/Documents/folder whale@do-whale.whe.me:~/
SCP 下载
$ scp -P 1234 whale@do-whale.whe.me:~/.bash_aliases ~/Downloads/
-r
支持文件夹:
$ scp -P 1234 -r whale@do-whale.whe.me:~/folder ~/Downloads/
SCP 快捷方法
觉得 scp
和 cp
很像:以下 functions 可以简化 scp
上传下载流程:
function scpupload()
{
scp -P 1234 -r $1 whale@do-whale.whe.me:$2
}
function scpdownload()
{
scp -P 1234 -r whale@do-whale.whe.me:$1 $2
}
以后就可以方便地上传下载文件:
$ scpupload ~/.bash_aliases ~/
$ scpdownload ~/folder ~/Downloads
0x03 - 端口转发
a. 本地端口转发 (Local Port Forwarding)
本地通过 SSH 隧道访问远程服务器内的端口。
格式:-L <local_port>:<host>:<host_port> <ssh_server>
Use case: 访问远程服务器上一个防火墙内的 HTTP 服务。比如:SSH 进入 OpenWRT 后访问控制面板,安全性更高,这样就不需要允许外网访问控制面板。端口少开一个是一个。
$ ssh -p 1234 -L 8000:localhost:8080 whale@do-whale.whe.me
接着访问 http://localhost:8000
就可以访问到服务器的 8080 端口。
b. 远程端口转发 (Remote Port Forwarding)
远程服务器通过 SSH 隧道访问本地的端口。
Use case: 内网穿透等。
格式:-R <remote_port>:<host>:<host_port> <ssh_server>
$ ssh -p 1234 -R 8080:localhost:80 whale@do-whale.whe.me
接着服务器端访问 http://localhost:8080
就可以访问本机的 80 端口。
c. 动态端口转发 (Dynamic Port Forwarding)
早期科学上网的方式,无法抵抗基于流量监控的封锁。
格式:-D <host>:<host_port> <ssh_server>
$ ssh -p 1234 -D 7001 whale@do-whale.whe.me
接着本地浏览器设置 SOCKS 代理通过 7001 端口。可选添加 -C
压缩加快文本传输。
d. 禁用端口转发
编辑 /etc/ssh/sshd_config
并设置:
AllowTcpForwarding no
更多:
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。