书格前端

SSH使用指南


SSH使用指南

SSH使用指南

目录

简介

SSH(Secure Shell)是一种用于在不安全网络中进行操作网络服务的加密网络协议,提供两台电脑不安全网络间进行认证和加密数据传输。主要用于网络管理员进行远程管理使用,允许用户远程登录、远程执行命令和拷贝文件。

历史

Version 1.x

1995, 芬兰赫尔辛基科技大学的一个研究员Tatu Ylönen设计了第一版的协议(称为SSH-1),并发布了一版免费的软件。

1995的12月,Ylönen成立了一家公司SSH Communications Security来推广和开发SSH,并将后续的版本转为商业软件。

Version 2.x

SSH-2修订版在2006年确认为标准,在安全和特性上都胜过SSH-1,并和SSH-1不兼容。

Version 1.99

一个区分向下兼容的命名方法,指支持2.0和之前版本的一个协议版本。

OpenSSH和OSSH

1999年Björn Grönvall基于原始的SSH v1.2.12开源版本开发了OSSH,不久OpenBSD分叉了OSSH并创建了OpenSSH,此后OpenSSH继续维护广为移植,OSSH被淘汰。

OpenSSH 7.6版本移除了对SSH-1的支持。

入门

SSH可以在多平台下有多种应用场景,包括大部分的Unix变种(GNU/Linux,BSD包括MacOS,Solaris)和Windows。

使用场景:

客户端

Unix和Linux系统中基本都包含ssh命令,这个命令启动SSH客户端用以在远程机器和SSH服务端建立安全的连接,通常使用的是OpenSSH SSH Client。

登录

ssh -p port_number remote_username@remote_host

如果是首次连接该远程机器,则会出现以下的提示信息:

The authenticity of host 'example.com' cannot be established.
DSA key fingerprint is 04:48:30:31:b0:f3:5a:9b:01:9d:b3:a7:38:e2:b1:0c.
Are you sure you want to continue connecting (yes/no)?

选择yes继续后,将会添加这个服务器到你的已知主机列表中~/.ssh/known_hosts:

Warning: Permanently added 'example.com' (DSA) to the list of known hosts.

每台服务器都有一个key,上述的问题来确认和保存主机key,在下一次连接服务器时,会确认是否为同一台服务器。连接建立后,用户即认证成功。正常情况下,命令会要求用户输入密码。

退出

使用exit命令退出远程会话

exit

执行远程命令

ssh也可以用于不登录服务器直接远程执行命令

ssh host command

ssh host ls /opt

X11转发

ssh -X remote_host

服务端

启动ssh服务,服务端ssh的配置在进阶中讲解

sudo service ssh start

# 使用systemd的命令
sudo systemctl start ssh

进阶

使用SSH key登录

通过登录ssh时会使用每次输入密码的方式,不过使用SSH的key更方便和安全,配置key稍微麻烦一点,后续就是一劳永逸的事情,直接一条命令或者一个别名直接登录。

创建SSH Key

在你的客户端电脑创建ssh key:

ssh-keygen -t rsa

按回车确认,你的key会被创建在~/.ssh/id_rsa.pub和~/.ssh/id_rsa

切换到.ssh目录:

cd ~/.ssh

查看各文件的权限:

ls -l

输出结果如下:

-rw-r--r-- 1 demo demo  807 Sep  9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep  9 23:13 id_rsa
-rw-r--r-- 1 demo demo  396 Sep  9 23:13 id_rsa.pub

id_rsa是仅文件拥有者可读,需要保持私密;id_rsa_pub可以被共享和读取。

传送公有Key到服务器

拷贝公有Key到服务器:

ssh-copy-id remote_host

这个命令会开启一个ssh会话,需要输入密码进行认证;输入密码成功后,将会拷贝公有Key到服务器的认证Key文件中,后续将允许不输入密码登录。

服务端SSH配置

服务端ssh配置是指配置sshd服务,默认情况,配置文件位于/etc/ssh/sshd_config

备份当前配置文件

sudo cp /etc/ssh/sshd_config{,.bak}

使用编辑器打开文件

sudo vi /etc/ssh/sshd_config

修改部分配置项

# 修改端口号,默认为22,修改后客户端连接需要指定这里设置的端口
Port 22

# 设置主机的keys
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

# 设置日志级别,排错时可增加日志级别,分别为QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3
SyslogFacility AUTH
LogLevel INFO

# 设置没有登录成功时的连接等待时间
LoginGraceTime 120

# 设置是否允许root用户登录,大多数普通用户能通过sudo提高权限并支持登录的话,该项应该设为yes
PermitRootLogin yes

# 设置安全防范,配置文件不安全时禁止登录
StrictModes yes

# 设置x窗口的转发
X11Forwarding yes
X11DisplayOffset 10

重启服务

上述设置保存后,需要重启服务才能生效

sudo service ssh restart
# 或
sudo systemctl restart ssh

检查配置修改是否有效,在修改配置的时候尽量保证有个用户已经登录连接,帮助设置有误时进行修改。

关闭密码认证

如果你可以安装了ssh key,并且可以通过key免密登录,否则关闭密码认证后将无法登录远程服务器。

使用管理员权限打开配置文件

sudo vi /etc/ssh/sshd_config

修改配置文件,关闭密码认证

PasswordAuthentication no

有两个配置需要确认设置正确

PubkeyAuthentication yes
ChallengeResponseAuthentication no

重启服务

sudo service ssh restart
# 或
sudo systemctl restart ssh

此时,密码认证将不可用,你的服务器将只能通过ssh key进行登录。

原理

基本原理

SSH的工作时通过客户端程序连接到ssh服务器。

基于Key的认证工作原理

基于Key认证的方式,需要一对Key,一个私有Key和一个公有Key。 私有Key保存在客户端电脑,并且要是安全和私密的。 公有Key放置在任何你想访问的服务器上。

当你通过键对访问时,服务器会使用公有Key创建一个消息给客户端,并且只有通过私有Key才能读取;接着,客户端发送合适的响应给服务端并认证。

参考