SSH连接与无密码访问配置

SSH(Secure Shell Protocol)是一种安全的远程登录协议,对比telnet和ftp,它提供加密保障。SSH支持多种加密算法,如RSA。建立连接时,客户端发送公钥,服务器验证后,客户端使用私钥签名数据,服务器解密验证身份。配置公私钥,例如在GitHub和Linux服务器间,可以实现无密码登录。在多密钥环境中,可以通过~/.ssh/config进行配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

SSH(Secure Shell Protocol),相比于 telnet, ftp等而言是一种安全加密的协议,后者通过明文传输数据,具有安全隐患。

SSH同时支持多种加密算法,目前常用的是RSA,具体加密算法由C-S双方协商决定。


SSH密钥连接建立过程

加密的核心是非对称加密。首先明确一个概念,在非对称加密过程中,原文由公钥加密,再由私钥解密;而签名(signiture),由私钥加密,公钥解密。

加密的目的是保护数据安全,因为只有私钥能够做到解密;而签名的目的是保证数据发送者是私钥拥有者,除了他没有人能做出能用对应公钥解密的签名。


建立过程

网络上众说纷纭,最后我还是去查了RFC 4252,现在做个总结。


客户端发起连接请求,主要说的是使用publickey的方式建立连接,别的还有password这种。另一个是给出了使用的公钥加密方式。

byte      SSH_MSG_USERAUTH_REQUEST
string    user name in ISO-10646 UTF-8 encoding [RFC3629]
string    service name in US-ASCII
string    "publickey"
boolean   FALSE
string    public key algorithm name
string    public key blob

服务器检查是否拥有公钥后返回,表示同意公钥加密方式,否则就要返回错误,没有公钥也需要拒绝。

byte      SSH_MSG_USERAUTH_PK_OK
string    public key algorithm name from the request
string    public key blob from the request

客户端发送,原文附上签名,

byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service name
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication
string    signature

签名的内容为,将以下内容使用私钥加密

string    session identifier
byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service name
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication

服务端收到后,将签名使用公钥解密,并与原文对比,确认消息的发送者为私钥的拥有者,返回SSH_MSG_USERAUTH_SUCCESS,连接建立


配置公私钥

以GitHub与Linux服务器为例。

  • 首先在客户端ssh-keygen

  • 会要求输入文件名、密码等信息,文件名默认为id_rsa

  • 最后会在~/.ssh/中生成id_rsaid_rsa.pub,前者为私钥后者公钥

  • 登录服务端,存放公钥

    • Github -> Settings -> SSH and GPG keys

    • New SSH key,输入名称和公钥内容

    • 使用ssh -T git@github.com测试连通性【必须】

    • 登录Linux服务器

    • 进入~/.ssh/

    • authorized_keys中写入公钥,占一行,多个公钥各占一行

    • 使用ssh USER_NAME@IP连接


多密钥环境配置

~/.ssh/config

Host example                       # 关键词
    HostName ip                    # 主机地址 ip或者主机名
    User root                      # 用户名
    # IdentityFile ~/.ssh/id_rsa   # 认证文件 私钥地址
    # Port 22                      # 指定端口

欢迎来我的博客做客
zhyib.gitee.io
zhyib.github.io

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值