OpenSSH入门使用指南
这里是墨格呀 2024-07-13 10:37:01 阅读 97
The START.
写在前面的话
本文的预设读者是至少入门一种计算机语言且有有简单的Win或Linux命令使用经验。如果你有满足前面两个条件,那么你就是本文的预设读者。如果你没有,那么请做好心理准备,接下来的阅读体验会更加艰难。
在接下来的文章里,主要讲述了OpenSSH、SSH的应用两个部分。
在第一个部分OpenSSH中,主要讲述了OpenSSH的结构,OpenSSH客户端与服务端的安装,及其相关命令语法与配置文件。在第二个部分SSH的应用中,将聚焦于现实工作环境,一步步实现相关的需求。
最后,本文所涉及的所有知识,均源于前人的研究成功,所参考的资料都将在文末给出。若有错误,欢迎各位读者指出!
Part ONE. OpenSSH
本章导读
OpenSSH is the premier connectivity tool for remote login with the SSH protocol. It encrypts all traffic to eliminate eavesdropping, connection hijacking, and other attacks. In addition, OpenSSH provides a large suite of secure tunneling capabilities, several authentication methods, and sophisticated configuration options.(www.openssh.com)
OpenSSH 是使用SSH协议进行远程登录的主要连接工具。它加密所有通讯信息以防止窃听,连接劫持和其他攻击。此外,OpenSSH 还提供了一大套安全隧道功能、多种身份验证方法和复杂的配置选项。(www.openssh.com)
在本章节中,主要讲述OpenSSH的结构——该程序到底是由哪些部分构成的?依次为基础,本章将会讲述OpenSSH的命令的基本使用方法,以及相关配置文件的修改等等。
一)OpenSSH的结构
OpenSSH客户端与服务端
在正式体验OpenSSH服务之前,先让我们预设一个场景。假设现在你手头上有两台电脑,你想要将A电脑中的数据传输到B电脑上,但是此时你却没有U盘等移动存储设备,那怎么办呢?当然,我们有很多方案,例如连接到互联网上,然后通过QQ传输文件,又或者通过某个局域网之间传输文件的程序也可以传输。不管你是否有传输文件的方案,现在,有一种全新的传输方案摆在你的眼前——OpenSSH。
一个完整的OpenSSH包含两个程序。一个是客户端(Client)程序,另一个是服务端(Server)程序。一般情况下,客户端作为命令的传输者,服务端作为命令的接收者。还是回到之前的例子上,我们可以在A电脑上安装OpenSSH客户端程序,在B电脑上安装OpenSSH服务端程序,然后通过客户端程序中的<code>scp命令,就可以将文件从客户端拷贝到服务端了。(在本小节末尾会给出Windows和Linux两个系统的OpenSSH服务的安装方法)
然而,实际情况比上述例子还复杂一点,因为我们必须要考虑一个很实际的问题:那就是我们该怎么保证接收数据的服务器是我们的目标服务器呢?这就是SSH协议存在的真正原因——身份认证。两台终端设备遵守SSH协议后,就可以极大地保证数据传输的安全性。
身份认证
SSH协议的具体内容涉及密码学的相关内容,本章节不做更深入的讨论。我们只要知道,遵守SSH协议后,为了保证数据的安全性,OpenSSH为我们提供了两种身份验证:密码认证和密钥认证。
前者密码认证很容易理解,就是像我们平常登陆QQ一样,输入账号密码就可以登陆。但是实际上,这种验证方法仍旧不够完善。一方面,这不够安全,你的密码也有可能被某个中间人监听;另一方面,这不够便利,每次输入密码过于麻烦,我想只输入一次密码就行了。根据以上两种需求,就诞生了第二种认证方法——密钥认证。这种身份认证方法就像是特工的秘密碰头一样,张三问你一个问题,然后李四如果回答对了,说明李四就是自己人,否则就不是。在OpenSSH中,通过OpenSSH客户端程序中的ssh-keygen
命令就可以生成这样的问题和答案——一对密钥。其中密钥中的公钥是问题,私钥是答案。
现在回到最开始传输文件的例子上。我们将公钥传输给B电脑上,将私钥保留在A电脑中,这时候,B电脑的服务端程序就会用公钥发出询问,当A电脑的客户端程序接收到后,就会用私钥解答,再将答案传输给服务端中,这时候服务端就做出了匹配,发现回答正确,这时候就可以保证传输的对象是目标主机了。
经过以上的密钥认证操作以后,就可以既保证安全性,也可以保证便利性。
最后,在实际工作环境中,你也许要面临着需要同时使用许多不同的密钥的情景。例如,你既要和Github服务器链接,也要和Gitee服务器链接,同时,你还管理着一台云服务器。最要命的是,这三台服务器都使用着不同的密钥对,那么在这种情况下,还要我们手动更换吗?为了应对这样的情景,OpenSSH也提供了很方便的管理程序——OpenSSH Authentication Agent。该程序的具体使用方法可参考本文Part THREE. 三)多密钥管理。本小节不作赘述。
Win10安装OpenSSH
Step 1:安装OpenSSH的客户端和服务端
摁下快捷键Win+Q,搜索“管理可选功能”,选择打开:
点击“添加功能”:
搜索“ssh”,然后安装“OpenSSH服务器”和“OpenSSH客户端”。现在的大部分Win系统计算机都会提前安装OpenSSH客户端,所以只需要下载OpenSSH服务器即可:
Step 2:设置服务端与密钥管理器自启动
摁下Win+Q,搜索“服务”,点击打开:
在服务页面中,找到“OpenSSH Authentication……”和“OpenSSH SSH Server”两个服务,运行这两个服务,并且将它们设置为自启动。在这两个服务中,前者为密钥管理器,后者为SSH服务端程序。
Step 3:验证是否成功启动
打开cmd窗口,输入命令<code>netstat -ant。如果22号端口的状态为LISTENING,则说明OpenSSH服务启动成功。
Linux安装OpenSSH
Step 1:安装OpenSSH的客户端和服务端
依次输入命令:
<code>$ sudo apt-get install openssh-client
$ sudo apt-get install openssh-server
输入以后等待安装即可。
Step 2:验证是否安装成功
依次输入命令:
$ ssh
$ sudo /etc/init.d/ssh restart
如果出现了下面的提示信息则说明安装成功!
二)客户端:OpenSSH命令
<code>ssh
Usage:
ssh [OPTION] [hostname]@[IP]
ssh(ssh客户端)主要用于链接远程服务器。链接上以后,可以传输命令到远程服务器上执行。
Options:
-v
详细模式。打印SSH在连接过程的中信息,常用于Debug。
案例
# 链接123.45.67.89这个IP的服务器,然后输入链接密码,验证成功后就可以登陆到服务器了。
$ ssh root@123.45.67.89
# 链接到github.com这个服务器,并且打印链接的详细信息。
$ ssh -v git@github.com
ssh-keygen
ssh-keygen
命令用于生成、管理密钥。
Usage:
ssh-keygen [-t rsa|ed25519] [-b bits] [-C comment] [-f output_keyfile]
生成新的密钥。
Or:
ssh-keygen -c [-C comment]
修改密钥的备注信息。
Options:
-t rsa|ed25519
选择加密方式。有很多种,这里列举两种最常用的方法。更详细的加密方法件官方SSH手册。-b bits
指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。-C comment
给密钥添加备注。-c
要求修改密钥的注释。输入选项后,程序会提示输入私钥文件名、密语(如果存在)、新注释。-f output_keyfile
指定输出的文件。
ssh-keygen
命令生成的密钥文件存放目录:
Windows:c:/User/[用户民]/.ssh
Linux:/root/.ssh
ssh-add
ssh-add
命令用于管理密钥。
Usage:
ssh-add [key_file]
添加密钥到密钥管理器中。
or:
ssh-add [OPTION]...
Options:
-l
展示出所有已经添加到密钥管理器其中的密钥对。-d [key]
将指定密钥对从密钥管理器中移除。-D
移除密钥管理其中的全部密钥对。
scp
scp
命令全称为“OpenSSH secure file copy”——基于OpenSSH的安全文件复制服务。主要用于终端设备之间的文件传输。
Usage:
scp [FILE]... [HOST]:[DIR]
Instance:
# 将下面三个文件传输到目标主机的home目录中。
$ scp a.cpp b.java c.py root@123.45.67.89:/home
三)服务端:sshd_config配置文件
服务端配置文件存放位置:
Windows系统:c:/ProgramData/ssh/sshd_config
Linux系统:/etc/ssh/sshd_config
配置内容:
关于sshd_config配置文件的内容,请参看下面这篇手册,另外也附上它的英文原版。在本节中不做赘述。
sshd_config 中文手册 - 金步国作品
sshd_config - OpenBSD Manual Pages
Part TWO. OpenSSH应用
本章导读
在本章节主要讲述关于实际开发环境中OpenSSH应用的配置教程。为了方便广大读者的阅读,本章下的各个小节之间相互独立。
此外,本章每个小节文末还有一个Other板块,这里会填写在应用过程中遇到的各种问题,方便读者的开发与阅读。
一)Win10免密登陆Linux云服务器
Step 1:Window10 准备工作
1、生成一对密钥
$ ssh-keygen -t rsa -b 4096 -C "CloudServer"
注:这里请使用密钥的默认名字:<code>id_rsa,即按三次回车即可。
2、将上面生成的密钥中的公钥传输到你的Linux云服务器上
$ scp %homepath%/.ssh/id_rsa.pub root@123.45.67.89:~/.ssh
注:这里的**root@123.45.67.89
**根据你自己的情况更改。前面填写用户名,后者填写IP地址。
Step 2:Linux准备工作
1、修改sshd_config
$ vim /etc/ssh/sshd_config
在该配置文件中,主要修改下面两个配置:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
将密钥登陆选项设置为yes,同时将公钥文件也设置好。
修改完成后重启OpenSSH服务端:
$ sudo /etc/init.d/ssh restart
出现如上提示,则说明OpenSSH服务端重新启动成功!
2、修改公钥文件名称
还记得Step 1中用<code>scp命令传输的公钥文件吗?在这个步骤中,将其命名为authorized_keys
,该名称与sshd_config文件中的配置相对应。
$ cd /root/.ssh
$ mv id_rsa.pub authorized_keys
注:不要将authorized_keys给拼错!!!眼睛给我睁大了!
Step 3:链接
打开Windows命令行窗口:
$ ssh root@123.45.67.89
如果出现了类似如上的提示,而没有提示你输入密码,那么恭喜你,免密登录配置成功!!!
二)Git与Github链接
前言
OpenSSH的另一个应用就是与Git的远程仓库连接。
Step 1:Git客户端准备
生成一对密钥
<code>$ ssh-keygen -t rsa -b 4096 -C "GithubKey"
注:这里请使用密钥的默认名字:<code>id_rsa,即按三次回车即可。
Step 2:Github服务端准备
1、登陆你的Github,然后依次点击:
Setting -> SSH and GPG keys -> New SSH Key
2、点击 New SSH key 后,将 Step 1 中生成的公钥复制到文字框中,最后点击 Add SSH key 即可添加成功。
这里的公钥正是在Step 1中生成的isa_key.pub文件。用记事本打开这个文件,里面的内容就是我们需要复制的公钥。
Step 3:链接
输入命令:
<code>ssh git@github.com
此时,你会接收到这样一条询问,输入yes即可。
最后如果出现了上面的文字信息,则说明你已经成功链接GitHub了!
Other:
如果你在Step 3时开着加速器,例如Steam++,运行命令后,你可能会收到如下的报错信息:
kex_exchange_identification: read: Software caused connection abort
banner exchange: Connection to 127.0.0.1 port 22: Software caused connection abort
此时,只需要退出加速器即可恢复正常。
三)多密钥管理
前言
OpenSSH的多密钥管理有两个方法:
OpenSSH Authentication Agent 服务管理config文件配置
接下来依次讲述这两种方法。
方法一:OpenSSH Authentication Agent 服务
Step 1:打开Authentication Agent服务
参考Part ONE. 一)OpenSSH的结构-Win10安装OpenSSH
Step 2:通过<code>ssh-add命令添加到Agent中
$ ssh-add [key_file]
$ ssh-add -l# 通过该命令打印出所有已经添加到密钥管理器中的密钥
Step 3:链接测试
$ ssh git@github.com
方法二:config文件配置
以Win10系统为例,在.ssh
目录中添加config
文件,并且在里面添加如下信息:
# 云服务器
Host 123.45.67.89# 主机地址
HostName 123.45.67.89# 主机名称,一般和上面相同
PreferredAuthentications publickey# 一般不变
IdentityFile ~/.ssh/CloudServer# 指定使用的密钥
# Gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/GiteeKey
填写好上面的配置信息后就可以测试登陆了!
该方法可以用在git bash的多密钥管理上。
The END.
参考资料
part one. OpenSSH
SSH协议握手核心过程@技术蛋老师 - 哔哩哔哩
ssh命令和SSH服务详解@骏马金龙 - 博客园
sshd_config 中文手册-金步国
适用于 Windows 的 OpenSSH 概述 | Microsoft Learn
OpenSSH: Manual Pages
part two. 应用
sshd_config - OpenBSD manual pages
ssh agent详解 - 知乎
如何优雅地访问远程主机?SSH与frp内网穿透配置教程_哔哩哔哩_bilibili
适用于 Windows 的 OpenSSH 密钥管理 | Microsoft Learn
sshd_config)
ssh agent详解 - 知乎
如何优雅地访问远程主机?SSH与frp内网穿透配置教程_哔哩哔哩_bilibili
适用于 Windows 的 OpenSSH 密钥管理 | Microsoft Learn
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。