baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • 华仔聊技术

  • 业务设计

  • 场景设计

  • 运维

  • 安全

  • 面试

  • mac相关工具推荐

  • 开发工具

  • 人工智能

  • 推荐

  • 阅读

  • 工具

    • idea相关
    • 常见的序列化工具
    • github个人资料展示
    • 个人资料
    • slf4j+logback
    • 跳板机
    • ssh原理
      • 1. 什么是ssh
      • 2. ssh网络原理
      • 4. 怎么实现登录自己的服务器
      • 4. ssh常用命令
    • 正则表达式
    • 性能测试
    • github快速访问
  • 计划

  • 产品

  • 云原生

  • go

  • QVM

  • 软件设计师

  • 极客时间

  • 单元测试

  • 其他
  • 工具
xugaoyi
2023-08-16
目录

ssh原理

# 1. 什么是ssh

SSH(Secure Shell)在计算机网络中有许多重要的作用,它主要用于提供安全的远程访问、数据传输和身份验证等功能。以下是SSH的主要作用:

  1. 安全远程访问: SSH允许用户在不安全的网络中远程登录到远程服务器或计算机,以执行命令、操作文件和管理系统。通过SSH,用户可以通过加密通道安全地访问远程主机,而不必担心敏感信息被截获。
  2. 加密数据传输: SSH通过建立加密通道,保护数据在传输过程中的机密性和完整性。这使得数据在网络上的传输过程中免受窃听和篡改的威胁。
  3. 文件传输: SSH提供了诸如SCP(Secure Copy Protocol)和SFTP(SSH File Transfer Protocol)等工具,用于在本地主机和远程主机之间安全地传输文件。这些工具保护了传输的文件内容。
  4. 远程命令执行: 除了远程登录,SSH还允许用户在远程服务器上执行命令,使用户可以通过命令行远程控制和管理服务器。这对于自动化和远程维护非常有用。
  5. 身份验证和安全访问控制: SSH支持多种身份验证方式,如密码、SSH密钥和证书等。这使得服务器可以验证用户的身份,并限制未经授权的访问。这对于保护敏感数据和资源非常重要。
  6. 隧道和端口转发: SSH允许用户创建安全的隧道,将本地端口与远程主机的端口关联起来。这对于安全地访问内部资源、绕过防火墙限制或加密通信非常有用。
  7. 远程维护和故障排除: 系统管理员可以使用SSH来远程管理和维护服务器,进行故障排除,更新软件和执行其他管理操作。
  8. 安全通信通道: SSH在不同网络设备之间创建了安全的通信通道,可以用于远程管理网络设备、传输配置文件等。

当SSH应用于STelnet,SFTP以及SCP时,使用的默认SSH端口都是22。当SSH应用于NETCONF时,可以指定SSH端口是22或者830。SSH端口支持修改,更改后当前所有的连接都会断开,SSH服务器开始侦听新的端口。

# 2. ssh网络原理

可参考:https://www.51cto.com/article/706122.html (opens new window)

比如我一台新的电脑要克隆github的仓库,一般都需要怎么本地使用ssh命名并获得公钥保存到github,可以结合这个案例结合上面的原理讲一讲吗

例子:克隆GitHub仓库到新的电脑

  1. 生成SSH密钥: 首先,在新的电脑上,您需要生成一个SSH密钥对。打开终端并运行以下命令(将您的电子邮件地址替换为实际地址):

    shCopy code
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
    1
    2

    在生成过程中,系统会询问您要保存密钥的路径。默认情况下,它会保存在 ~/.ssh/id_rsa(私钥) 和 ~/.ssh/id_rsa.pub(公钥)。

  2. 添加公钥到GitHub: 打开 ~/.ssh/id_rsa.pub 文件,复制其中的内容。然后,登录到GitHub账户,在设置(Settings)中找到SSH和GPG keys,添加您刚刚复制的公钥。

  3. 克隆GitHub仓库: 现在,您的新电脑已经配置好SSH密钥,您可以在终端中使用SSH克隆GitHub仓库。假设您要克隆名为 my-repo 的仓库,使用以下命令:

    shCopy code
    git clone git@github.com:yourusername/my-repo.git
    
    1
    2

    这将克隆 my-repo 仓库到您的本地文件系统中。

原理解释:

  1. 在生成SSH密钥时,您使用了 ssh-keygen 命令,该命令会为您生成一对RSA密钥(公钥和私钥)。
  2. 在将公钥添加到GitHub时,您将公钥添加到您的GitHub账户中。这样,GitHub就知道哪个公钥对应于您的账户。
  3. 当您通过SSH URL(git@github.com:yourusername/my-repo.git)克隆GitHub仓库时,您的本地SSH客户端会使用私钥对GitHub进行身份验证。
  4. GitHub服务器收到连接请求后,它会查找匹配的公钥。如果匹配成功,就说明您是授权的用户,并且连接会通过加密通道进行传输。

通过这个过程,您可以在不暴露敏感信息的情况下与GitHub进行安全通信。整个过程涉及到密钥生成、密钥匹配和加密通信,从而确保了数据的安全性和身份的验证。

# 4. 怎么实现登录自己的服务器

我们都会在github上保存我们的publickey。但是如果我们有自己的服务器,我们登录又不想使用密码登录,而是用publickey登录,应该怎么做呢?

通过公钥方式进行SSH登录是一种更安全和方便的方式,因为它不需要输入密码,而是使用密钥对进行身份验证。下面是在服务器上设置公钥方式进行SSH登录的步骤:

  1. 生成SSH密钥对: 首先,在本地计算机上生成SSH密钥对。如果您已经有密钥对,可以跳过此步骤。打开终端并运行以下命令(将您的电子邮件地址替换为实际地址):

    shCopy code
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
    1
    2

    这将生成一个RSA密钥对,包括私钥(~/.ssh/id_rsa)和公钥(~/.ssh/id_rsa.pub)。

  2. 复制公钥到服务器: 使用SSH将您的公钥复制到服务器。在终端中运行以下命令(将 your_username 替换为您在服务器上的用户名,your_server_ip 替换为服务器的IP地址或主机名):

    shCopy code
    ssh-copy-id your_username@your_server_ip
    
    1
    2

    如果 ssh-copy-id 命令不可用,您可以手动将 ~/.ssh/id_rsa.pub 文件中的内容复制到服务器上的 ~/.ssh/authorized_keys 文件中。

  3. 设置权限: 在服务器上设置SSH文件的权限,确保私钥和授权密钥的权限设置正确:

    shCopy code
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
    1
    2
    3
  4. 禁用密码登录(可选): 为了增强安全性,您可以在服务器上禁用密码登录,仅允许密钥登录。编辑SSH服务器配置文件(通常是 /etc/ssh/sshd_config),找到 PasswordAuthentication 行并将其设置为 no。然后重新启动SSH服务。

  5. 尝试SSH登录: 现在,您应该能够使用您的私钥进行SSH登录。在本地终端中运行以下命令:

    shCopy code
    ssh your_username@your_server_ip
    
    1
    2

    系统将使用私钥进行身份验证,而不需要输入密码。

通过这些步骤,您可以在服务器上设置公钥方式进行SSH登录。请务必谨慎保存私钥,不要将其泄露给其他人,以确保安全性。

# 4. ssh常用命令

当使用SSH命令时,以下是一些常用的用法和选项:

  1. 基本连接:

    ssh username@hostname
    
    1

    这将连接到指定的主机(hostname)使用给定的用户名(username)。系统会提示您输入密码或使用SSH密钥进行身份验证。

  2. 指定端口:

    ssh -p port_number username@hostname
    
    1

    如果目标主机使用非默认的SSH端口号(默认是22),您可以使用 -p 选项来指定端口号。

  3. 使用SSH密钥:

    ssh -i path/to/private_key username@hostname
    
    1

    如果您有SSH密钥对,可以使用 -i 选项来指定私钥文件的路径。这将允许您无需输入密码进行连接。

  4. 执行远程命令:

    ssh username@hostname 'command_to_run'
    
    1

    您可以使用SSH连接来在远程主机上执行命令,而不需要完全登录到远程主机。

  5. 传输文件:

    scp source_file username@hostname:destination_path
    
    1

    使用 scp 命令可以在本地主机和远程主机之间传输文件。将 source_file 替换为要传输的本地文件路径,destination_path 替换为远程主机上的目标路径。

  6. 端口转发(SSH隧道):

    ssh -L local_port:target_host:target_port username@jump_host
    
    1

    这会在本地创建一个端口转发,将本地的 local_port 与目标主机的 target_host:target_port 关联起来。这对于创建安全的本地到远程主机的通信通道很有用。

  7. 断开连接: 您可以在SSH会话中键入 exit 或使用快捷键 Ctrl + D 来断开与远程主机的连接。

这只是SSH命令的一些常用用法和选项。在实际使用中,您可能会根据具体情况使用不同的选项和命令。要了解更多细节和选项,请查阅您系统的SSH文档或运行 man ssh 命令来获取SSH的手册页。

编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19
跳板机
正则表达式

← 跳板机 正则表达式→

最近更新
01
spark基础
02-22
02
mysql读写分离和分库分表
02-22
03
数据库迁移
02-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式