安装以及基本使用

安装客户端可以通过以下命令进行安装

# ubuntu debian
apt-get install openssh-client

# centos fedora
dnf install openssh-clients

一般连接用法就是ssh user@hostname

-p port : 指定ssh端口,默认为22
-N : 表示端口转发建立的SSH只用于端口转发,而不能执行远程命令

连接流程

  1. 初次连接,会将远程服务器公钥hash值储存在客户端

    具体储存在~/.ssh/known_hosts文件

  2. 若服务器公钥hash发生改变,便会与储存不一致。在这种情况,可以通过ssh-keygen -R hostname删除hostname对应公钥,当然也可以手动在文件中删除

配置

配置文件位置

  • ~/.ssh/id_rsa:用于 SSH 协议版本2 的 RSA 私钥。
  • ~/.ssh/id_rsa.pub:用于SSH 协议版本2 的 RSA 公钥。
  • ~/.ssh/config: 用户个人ssh配置文件
  • /etc/ssh/ssh_config: 全局ssh配置文件
  • ~/.ssh/identity:用于 SSH 协议版本1 的 RSA 私钥。
  • ~/.ssh/identity.pub:用于 SSH 协议版本1 的 RSA 公钥。
  • ~/.ssh/known_hosts:包含 SSH 服务器的公钥指纹。
  • ~/.ssh/id_ecdsa: 用户的ECDSA私钥
  • ~/.ssh/id_ecdsa.pub: 用户的ECDSA公钥

SSH配置

语法就是配置命令后面接值。接可以空格也可以等于

# 配置用户名、密码
# 比如针对host remoter.com
Host remoteSSH
		 HostName remoter.com
		 User root
		 Port 2222
# 那么之后ssh remote SSH 就等于ssh -p 2222 root@retomer.com

密钥登录

ssh密钥登录过程如下

  1. 客户端通过ssh-keygen生成公私钥
  2. 将客户端公钥放入远程服务器相应用户的~/.ssh/authorized_keys
  3. 客户端向服务端发起SSH登录请求
  4. 服务器收到请求后,会发送随机数据给用户,要求证明身份
  5. 客户端收到服务器发来数据,使用私钥对数据进行签名,发给服务器
  6. 服务器收到加密签名后,使用公钥解密,若一致则允许用户登录

ssh-keygen

# 生成
ssh-keygen
# 移除
ssh-keygen -R example.com

端口转发

本机端口转发

将对本机A指定端口X的访问请求转发给主机B的Y端口

ssh -L [接受访问的地址]本机端口X:远程主机B:远程主机B端口

远程端口转发

在建立本机到远程的SSH隧道后,使远程服务器访问本机

ssh -R 远程端口:远程服务器IP:远程服务器端口

比如主机A运行a虚拟机,那么处于同一局域网下的主机B便可以通过在主机A执行以下命令达到通过主机B 1234端口

ssh -R 主机A端口:虚拟机a IP:虚拟机a 端口  主机B用户名@主机B IP

动态转发

本机与远程SSH服务器建立了加密连接,针对本机某个端口的访问都通过这个加密连接转发

ssh -D 本地主机A端口X 远程SSH服务器

比如对于本机2121端口连接了远程SSH服务器remoteSSHHost,那么动态转发命令如下

ssh -D 2121 remoteSSHHost
# 用户访问请求。指定通过sock5协议的本地端口2121去访问www.example.com
curl -x sock5://localhost:2121 http://www.example.com

服务端

ssh服务端可以通过如下命令安装

# Debian
$ sudo aptitude install openssh-server

# Red Hat
$ sudo yum install openssh-server

sshd 的配置文件在/etc/ssh目录,主配置文件是sshd_config,此外还有一些安装时生成的密钥。

  • /etc/ssh/sshd_config:配置文件
  • /etc/ssh/ssh_host_ecdsa_key:ECDSA 私钥。
  • /etc/ssh/ssh_host_ecdsa_key.pub:ECDSA 公钥。
  • /etc/ssh/ssh_host_key:用于 SSH 1 协议版本的 RSA 私钥。
  • /etc/ssh/ssh_host_key.pub:用于 SSH 1 协议版本的 RSA 公钥。
  • /etc/ssh/ssh_host_rsa_key:用于 SSH 2 协议版本的 RSA 私钥。
  • /etc/ssh/ssh_host_rsa_key.pub:用于 SSH 2 协议版本的 RSA 公钥。
  • /etc/pam.d/sshd:PAM 配置文件。

sshd_config可以配置项很多,下面仅介绍部分

  • PasswordAuthentication 是否允许密码登录,默认为yes
  • ClientAliveCountMax 指定建立连接后,客户端失去响应时,服务器尝试连接的次数(ClientAliveCountMax 8
  • Port 代表sshd监听端口,默认为22

Ref

  1. https://wangdoc.com/ssh/port-forwarding.html
  2. https://zhuanlan.zhihu.com/p/148825449
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐