切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
编码
网络协议
正则表达式
时间规范
MCP
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
规范协议
SSH介绍与使用说明
[TOC] ## 1. SSH定义 SSH是一种网络协议,用于计算机之间的加密登录,目前是Linux系统的标准配置 ## 2. SSH实现原理 __客户端登录服务端原理:__ 客户端向服务端发送登录请求,服务端接收后将自己的公钥发送回客户端,客户端拿到公钥后对登录信息进行加密后再次发起登录请求,服务端使用私钥解密后验证登录信息 > __附加说明《SSH存在的安全问题》:__如果客户端在发送请求登录的阶段被截获了,然后冒充要请求的远程主机,将伪造的公钥发送给用户,用户是区分不出真伪的,SSH公钥是自己签发的,不似https有证书公正中心签发 ## 3. 常用的几款SSH客户端 + OpenSSH:是另外一个比较热门的 SSH 连接客户端工具,软件是完全免费开源的。适用于 Windows、Linux 和 Mac OS等流行的系统平台 - 站内可点击[OpenSSH 安装]()查看安装步骤 + Putty:是一款开源免费的SSH连接客户端软件,也是最知名的Windows SSH连接工具 + WinSCP:WinSCP是一款支持SSH连接的客户端软件。主要用于文件传输功能。基本文件管理器具有多种脚本功能。此外还可以在远程服务器和本地计算机之间轻松复制文件。支持FTP、FTPS、SCP、SFTP、WebDAV 或 S3 文件传输协议 + Xshell:是一款适用于 Windows 的全功能 SSH 客户端软件。与 PuTTY 和类似产品的不同之处在于能够为每个终端会话设置不同的参数,为多个会话创建通用脚本 + Hyper:是一个跨平台的SSH连接工具,最大的特点就是软件的用户界面设计的非常的美观。而且可以完全免费的进行使用,并且支持各种类型的系统平台(包括 Windows、Mac OS 和 Debian、 Fedora) ## 4. SSH登录 ### 4.1 口令登录命令 __语法:__<mark>ssh -p 22 user@host</mark> |参数|说明| |--|--| |-p|指定端口,默认端口是22| |user|登录用户名| |host|登录的主机| __示例:__ ```Shell # 标注命令 ssh -p 22 root@192.168.1.1 # 端口默认是22的时候可以简写的命令 ssh root@192.168.1.1 # 如果本地的用户命和远程登录的用户名一致,可以使用下面的简写命令(例如本地账户名是root,远程的登录账户名也是root) ssh 192.168.1.1 ``` ### 4.2 公钥登录 __原理:__使用公钥登录需要用户自己生成公钥,并将公钥告知远程主机,用户登录时主机向用户发送一段随机字符串,用户接收到后用自己的私钥加密后,再发送给远程主机,远程主机接收后,用事先用户存储的公钥进行解密,如果成功则证明可信允许登录 __生成公钥语法:__<mark>ssh-keygen</mark> |参数|说明| |--|--| |-b|指定密钥长度| |-e|读取 openssh 的私钥或者公钥文件| |-C|添加注释| |-f|指定用来保存密钥的文件路径(包含文件名),<br/>默认路径~/.ssh/id_rsa,id_rsa为默认的私钥的文件名无后缀,id_rsa.pub为默认的公钥名| |-i|读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥| |-I|显示公钥文件的指纹数据| |-N|提供私钥新密码| |-P|提供私钥旧密码| |-t|指定要创建的密钥类型| |-m|指定密钥生成的密钥格式,可用于在 OpenSSH 私钥和 PEM 私钥格式之间进行转换| #### 4.2.1 公钥登录示例 __示例:__下面命令是在`git bash here`中执行的,当然使用其他ssh工具也是可以的,在window中也可以使用cmd开创建密钥[点击查看](/blog/info-md.html/69A300783DDED6FE?type=172#cmd创建SSH密钥) ```Shell # 设置默认的密钥:输入下面的代码一路 Enter 即可 ssh-keygen # 设置指定名称密钥:生成给gitee使用的密钥 ssh-keygen -t rsa -C "gitee@qq.com" -f "id_rsa_gitee" # 设置指定名称密钥:生成给github使用的密钥 ssh-keygen -t rsa -C "github@163.com" -f "id_rsa_github" ``` > window环境下 执行完毕后,密钥文件存放在 <mark>C:\\Users\\Administrator\\.ssh</mark> 目录下,`id_rsa_gitee`是私钥文件,`id_rsa_gitee.pub`为公钥文件 __配置远程主机公钥:__将生成的公钥(id_rsa_gitee.pub),复制到远程主机上 + 以gitee为例  + 远程主机是Linux需要使用 `ssh-copy-id user@host` 命令讲公钥传送到远程主机上 __配置config:__在存放密钥文件的目录下创建一个名为config文件(无后缀),文件内容如下,这是给gitee配置公钥登录的示例 ```Shell ######### gitee ######### # 主机别名 Host gitee #主机地址 HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_github ``` __测试:__命令如下 ```Shell ssh -T git@gitee ``` 执行测试命令后,在测试过程中可能会出现输入密码的提示,这里可以直接 Enter 过去,也可以设置密码,示例就直接 Enter 了,执行成功后会有提示<mark>Hi xxxx! You've successfully authenticated, but GITEE.COM does not provide shell access.</mark>。一般初次连接都会有<mark>Are you sure you want to continue connecting</mark>提示,只要输入yes即可 __注意:__如果登录Linux失败可以从下面几个点排除原因 + 修改`/etc/ssh/sshd_config`配置文件,如果下面几项配置被注释了,去除注释再试 ```Shell RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ``` #### 4.2.2 将私钥添加到SSH中 在Git Bash Here窗口下,即使已经按照上面的步骤设置了公钥和配置,但关闭后,再打开后仍然会提示<mark>Permission denied(publickey)</mark>错误,这是因为对应的私钥还没有添加到SSH中,使用`ssh -vT git@gitee.com`命令可以查看连接的日志,自定义密钥都没有获取到,所以连接失败了,这时就需要手动将密钥添加到SSH中,通过下面命令添加 ```shell # 将私钥添加到SSH前需要先认证身份代理,否则会提示【没有打开agent的权限】 ssh-agent bash # 语法:ssh-add <私钥路径> ssh-add ~/.ssh/id_rsa_gitee # 添加完密钥后可以使用git -T git@gitee验证 # 使用下面的命令可以查看密钥是否添加成功 ssh-add -l ``` 但是就算上面添加完私钥后,关闭Git Bash Here窗口,下次进入还是会提示<mark>Permission denied(publickey)</mark>,似乎配置没有生效,这因为`ssh-agent`命令只在当前窗口生效,关闭后就自动清除了,如果要永久生效,还需要进行下面的操作,在`C:\\Users\<用户名>`目录下创建一个`.bashrc`文件,文件的内容复制下面 ```shell env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add fi unset env ``` 创建完`.bashrc`文件后,在打开Git Bash Here窗口下重新执行`ssh-add`添加私钥就可以了,这里不需要再执行`ssh-agent`了,这样添加完密钥之后,就会永久有效了。 #### 4.2.3 多个远程主机配置密 要同时使用多个远程主机时,密钥要分开设置,这时需要生成多个不同的公钥,上诉示例中生成了三个公钥,分别是默认公钥,gitee使用的密钥和github使用的密钥。多个密钥需要在config文件中分别配置,以此解决SSH冲突的问题。 ```Shell # blit Host blit HostName 192.168.*.* port 2***8 PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa # 以上是自己使用blit搭建的git代码托管站点 # ----------------------------------------------- # github Host github HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_github # ----------------------------------------------- # gitee Host gitee HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_gitee ``` *** > 参考文章: + https://zhuanlan.zhihu.com/p/323322650 + http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号