04/20/2017

SSH 设置与技巧

如题。本文讲述 SSH 的安装、设置、文件传输、端口转发的应用。通过 SSH 上传下载文件、内网穿透、访问防火墙后的服务、科学上网方法等。

本文基于 Ubuntu 16.04 LTS。

0x00 - 安装 SSH

Ubuntu 默认是附带 SSH 的。如果因为种种原因没有,请运行如下安装:

$ sudo apt-get install ssh

ssh 包包括了 openssh-server 与 openssh-client。

0x01 - 配置 SSH Daemon

摘自 「0x03 - 设置 SSH | 全新 Ubuntu VPS 配置」。

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 快捷方法

觉得 scpcp 很像:以下 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

更多:

本文链接:https://blog.whe.me/post/ssh-configurations-and-tips.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。