美文网首页
ssh安装、介绍、配置手把手级教程

ssh安装、介绍、配置手把手级教程

作者: 周冬雨_ | 来源:发表于2024-07-08 16:59 被阅读0次

先分清SSH服务与客户端的区别(非新手请跳过)

当你在Linux系统上尝试使用ssh命令时,如果没有安装openssh-server包,你仍然可以使用ssh命令,但这个命令是用来作为客户端发起SSH连接的,而不是用来接收连接的。这是因为ssh命令本身是包含在openssh-client软件包中的,而openssh-server则是用于提供SSH服务的服务器端组件。

SSH命令(客户端)

ssh命令作为一个客户端工具,它允许你从本地计算机连接到远程计算机上的SSH服务。当你运行ssh user@remotehost时,你的本地计算机将使用SSH协议建立一个加密的会话,与远程主机上的SSH守护进程进行通信。

SSH服务(服务器端)

openssh-server是提供SSH服务的服务器端软件。它在远程主机上运行并监听特定的端口(通常是22),等待接收来自ssh客户端的连接请求。当一个连接请求到达时,openssh-server将验证用户的凭据(如密码或公钥),然后根据用户的权限提供相应的服务,如Shell访问、SFTP(Secure File Transfer Protocol)等。

区别总结

  • 客户端 vs 服务器ssh命令通常指的是客户端工具,用于发起SSH连接;而openssh-server是服务器端软件,用于接受和处理SSH连接请求。
  • 安装软件包:客户端功能由openssh-client包提供,而服务器端功能则由openssh-server包提供。
  • 运行环境:客户端工具可以在任何需要远程访问的机器上运行,而服务器端软件必须在被远程访问的机器上运行。

如果你试图在没有安装openssh-server的情况下在本地运行ssh命令,比如ssh localhost,你将会收到一个错误,因为没有本地的SSH服务可以响应你的连接请求。在这种情况下,你可能需要先安装openssh-server包来在本地机器上启用SSH服务。

在Linux Mint或类似的基于Debian的系统中,你可以使用以下命令来安装openssh-server

sudo apt install openssh-server

同样,如果你的系统上没有openssh-client,你也不能从该系统发起SSH连接,需要通过以下命令安装:

sudo apt install openssh-client

通常,openssh-client是大多数Linux发行版的标准安装的一部分,所以你可能不需要单独安装它。

ssh服务(openssh-server)

OpenSSH Server简介

OpenSSH Server(openssh-server)是一个免费的、开源的SSH(Secure Shell)协议实现,它提供了一种安全的方式来管理远程服务器、传输文件以及执行远程命令。SSH协议设计用于替代不安全的网络服务,如Telnet、FTP、rlogin等,这些服务在传输数据时不加密,因此容易受到中间人攻击和密码嗅探。

OpenSSH Server的用途

以下是OpenSSH Server的一些主要用途:

  1. 远程登录:OpenSSH Server允许管理员和其他授权用户从远程位置登录到服务器,从而能够执行管理任务,如启动、停止或重启服务,查看系统日志,管理文件和目录,以及执行系统维护。

  2. 文件传输:通过SFTP(SSH文件传输协议)或SCP(Secure Copy Protocol),OpenSSH Server可以安全地在本地和远程系统之间传输文件。这对于备份数据、同步文件、上传网站内容或下载大型文件非常有用。

  3. 端口转发:SSH可以用于端口转发,允许你在远程服务器上建立一个安全隧道,通过这个隧道访问另一个网络上的服务,比如数据库、邮件服务器或其他网络资源。

  4. 跳板机(Jump Server):OpenSSH Server可以作为进入内部网络的“跳板”,允许外部用户通过SSH连接到一个公共的服务器,然后再从那里安全地访问内部网络中的其他机器。

  5. 安全隧道:SSH可以用来创建一个加密通道,用于安全地传输不安全的协议数据,比如HTTP、DNS查询、SMTP邮件等。

  6. 自动化任务:通过公钥认证,可以设置无密码的SSH连接,这对于自动化脚本、定期任务(如cron jobs)、以及DevOps工作流程(如持续集成/持续部署CI/CD管道)非常重要。

OpenSSH Server的工作原理

当OpenSSH Server运行时,它监听特定的网络端口(默认为TCP端口22),等待来自SSH客户端的连接请求。一旦收到请求,它会与客户端进行一系列的安全握手,包括身份验证过程。一旦身份验证成功,用户便可以获得一个shell会话或访问其他SSH服务,如文件传输。

安全性

OpenSSH Server使用强大的加密算法来保护数据在传输过程中的安全,防止数据被窃听或篡改。此外,管理员可以通过配置防火墙、限制访问、使用复杂的密码策略和公钥认证等措施来进一步增强安全性。

总之,OpenSSH Server是现代网络基础设施中不可或缺的一部分,它为远程管理和文件传输提供了一个安全、可靠和高效的方法。

在Linux Mint等Debian类系统(比如ubuntu、deepin))中安装SSH服务(OpenSSH服务器)是一个简单直接的过程。
以下是安装和配置SSH服务的步骤,并将介绍servicesystemctl命令的使用方法:

备注:在Linux Mint系统中,systemd是默认的初始化系统,因此systemctl通常是首选的命令来管理服务。不过,在某些情况下,service命令仍然可用,尽管它可能被systemctl所替代。

步骤 1: 更新软件包列表

确保你的系统软件包列表是最新的:

sudo apt update

步骤 2: 安装 OpenSSH 服务器

使用apt来安装OpenSSH服务器:

sudo apt install openssh-server

步骤 3: 使用 systemctl 管理 SSH 服务

systemctl命令用于与systemd服务管理器交互。以下是一些常见的systemctl命令及其用途:

  • 查看 SSH 服务的状态

    sudo systemctl status ssh
    
  • 启动 SSH 服务

    sudo systemctl start ssh
    
  • 停止 SSH 服务

    sudo systemctl stop ssh
    
  • 重启 SSH 服务

    sudo systemctl restart ssh
    
  • 检查 SSH 服务是否开机自启

    sudo systemctl is-enabled ssh
    
  • 启用 SSH 服务开机自启

    sudo systemctl enable ssh
    
  • 禁用 SSH 服务开机自启

    sudo systemctl disable ssh
    

步骤 4: 使用 service 管理 SSH 服务

虽然service命令在较新版本的Linux Mint中可能被systemctl所替代,但在某些情况下它仍然可以使用。以下是service命令的一些常见用法:

  • 查看 SSH 服务的状态

    sudo service ssh status
    
  • 启动 SSH 服务

    sudo service ssh start
    
  • 停止 SSH 服务

    sudo service ssh stop
    
  • 重启 SSH 服务

    sudo service ssh restart
    
  • 重读 SSH 服务配置

    sudo service ssh reload
    

步骤 5: 配置防火墙(如果有的话)

如果使用ufw防火墙,确保SSH端口是开放的:

sudo ufw allow ssh

步骤 6: 测试 SSH 连接

从另一台机器尝试SSH连接,确认服务正常工作:

ssh your_username@your_server_ip_address

其中your_usernameyour_server_ip_address应替换为实际的用户名和服务器IP地址。

步骤 7: 配置 SSH

编辑/etc/ssh/sshd_config文件来调整SSH服务器的行为。例如,你可能想更改SSH监听的端口号。编辑完毕后,使用systemctlservice命令重启SSH服务以应用更改。

ssh客户端(openssh-client)

在Debian类系统(比如Mint、Ubuntu、Deepin)、新版本的windows系统中,通常已经预装了ssh客户端

OpenSSH Client

OpenSSH客户端是一套工具,用于从本地计算机发起SSH连接到远程服务器,或使用SSH协议进行文件传输。它包括几个不同的命令行工具,如sshscpsftp

主要组件

  1. ssh - 用于通过SSH协议建立安全的远程登录会话。它允许用户在远程服务器上执行命令,如同直接在该服务器上操作一样。

  2. scp - Secure Copy Protocol,用于在支持SSH协议的计算机间安全地复制文件。它类似于cp命令,但是通过加密的SSH连接进行文件传输。

  3. sftp - SSH文件传输协议,是一个更高级的文件传输协议,提供了更多的功能和更好的性能。它允许用户在远程服务器上浏览目录、上传和下载文件,以及执行其他文件管理操作。

OpenSSH Client的使用场景

  • 远程命令执行:通过ssh命令,用户可以从本地机器远程执行服务器上的命令。
  • 文件传输:利用scpsftp命令,用户可以在本地机器和远程服务器之间安全地传输文件。
  • 远程调试和维护:系统管理员可以使用ssh来远程登录服务器,进行故障排查和维护工作。
  • 自动化脚本:开发人员可以编写脚本来自动执行远程操作,如部署代码、备份数据或执行测试。

安全特性

OpenSSH客户端提供了多种安全特性,包括:

  • 公钥认证:允许用户通过私钥进行无密码登录,增加了安全性。
  • 数据加密:所有通过SSH协议传输的数据都会被加密,保护数据免受窃听。
  • 端口转发:可以用于创建安全的隧道,通过SSH连接来访问其他网络服务。

使用示例

  • 使用ssh登录远程服务器:

    ssh user@remote.server.com
    
  • 使用scp复制文件到远程服务器:

    scp localfile user@remote.server.com:/path/to/remote/directory
    
  • 使用sftp浏览远程服务器上的文件:

    sftp user@remote.server.com
    

总结

OpenSSH客户端和OpenSSH服务器共同构成了SSH协议的完整实现,它们一起提供了安全的远程访问和文件传输功能。客户端工具使用户能够从本地机器安全地访问远程服务器,执行命令和管理文件,而服务器端则提供这些服务,确保数据传输的安全性。

ssh、scp、sftp命令用法

ssh, scp, 和 sftp 都是基于SSH协议的工具,用于在计算机之间建立安全连接和传输数据。下面是每个命令的详细介绍,包括常见的参数和示例。

SSH (Secure Shell)

ssh 命令用于通过网络建立安全的Shell会话。它允许用户从本地计算机远程控制另一台计算机。

基本语法

ssh [options] [user@]hostname [command]

常见参数

  • -i <identity_file>: 指定用于身份验证的私钥文件。
  • -p <port>: 指定SSH服务器监听的端口号。
  • -v: 显示详细的连接和调试信息。
  • -X-Y: 启用X11转发,允许远程主机上的图形界面程序在本地显示。
  • -L <local-port>:<host>:<remote-port>: 设置本地端口转发。

示例

  • 登录远程服务器:
    ssh user@server.example.com
    
  • 使用指定的私钥文件登录:
    ssh -i ~/.ssh/my_key user@server.example.com
    
  • 登录并立即执行命令:
    ssh user@server.example.com "ls -l"
    
  • 使用非标准SSH端口登录:
    ssh -p 2222 user@server.example.com
    

SCP (Secure Copy)

scp 命令用于在本地和远程主机之间安全地复制文件或目录。

基本语法

scp [options] file_source file_destination

常见参数

  • -r: 递归复制目录。
  • -P <port>: 指定SSH端口号。
  • -i <identity_file>: 指定用于身份验证的私钥文件。
  • -p: 保留源文件的权限、时间戳等属性。
  • -v: 显示详细的传输信息。

示例

  • 从本地复制文件到远程服务器:

    scp my_file user@server.example.com:/home/user/
    

    这里my_file是从本地复制的文件,user@remote_host:/home/user是远程主机的目标位置。

  • 从远程服务器复制文件到本地:

    scp user@server.example.com:/home/user/remote_file .
    

    这里.表示当前目录,my_file是从远程主机复制的文件。

  • 使用私钥文件递归复制目录:

    scp -r -i ~/.ssh/my_key my_dir user@server.example.com:/home/user/
    

    使用-i选项指定了私钥文件~/.ssh/my_private_key。使用-r选项递归复制my_directory目录。

SFTP (SSH File Transfer Protocol)

sftp 命令提供了交互式的文件传输环境,类似于传统的FTP。

基本语法

sftp [options] [user@]hostname

常见参数

  • -o <option>=<value>: 用于设置SSH配置选项,如端口或身份验证文件。
  • -b <batch-file>: 指定批处理文件,用于自动化sftp会话。

示例

  • 连接到远程服务器:
    sftp user@server.example.com
    
  • 连接并使用非标准端口:
    sftp -o "Port=2222" user@server.example.com
    
  • 使用私钥文件连接:
    sftp -o "IdentityFile=~/.ssh/my_key" user@server.example.com
    

sftp环境中,你可以使用类似get, put, ls, cd, rm等命令来管理远程文件。

这些命令的组合和参数可以非常灵活,以适应各种不同的需求和场景。记得在使用这些命令时,检查你的SSH服务器配置,防火墙规则,以及可能的网络限制,以确保安全和成功的连接。

ssh端口配置和密钥配置

配置SSH服务端口、公钥和私钥是增强SSH安全性的重要步骤。下面我将详细介绍每个部分的逻辑和具体配置方法。

更改SSH服务端口

更改SSH服务端口可以减少未授权的扫描和暴力破解攻击的机会。默认情况下,SSH服务监听TCP端口22。

修改配置文件

  1. 打开SSH服务的配置文件sshd_config,通常位于/etc/ssh/目录下:

    sudo nano /etc/ssh/sshd_config
    
  2. 查找Port行,将数字更改为新的端口号,例如:

    Port 2222
    

    保存并关闭文件。

  3. 重启SSH服务以应用更改:

    sudo systemctl restart ssh
    

注意事项

  • 更改端口后,所有客户端连接都必须使用新端口。
  • 如果你的服务器有防火墙,不要忘记更新防火墙规则以允许新端口的流量。

配置SSH公钥和私钥

使用SSH密钥对进行认证可以避免每次连接时输入密码,同时提高安全性。

生成密钥对

  1. 在你的客户端计算机上生成一个RSA密钥对(如果尚未生成):

    ssh-keygen -t rsa -b 4096
    

    这将生成一个私钥(默认为id_rsa)和一个公钥(默认为id_rsa.pub)。

  2. 当提示输入文件名时,按Enter键接受默认位置(.ssh/id_rsa),并选择一个安全的passphrase(密码短语)来保护私钥。

复制公钥到服务器

  1. 使用ssh-copy-id命令将公钥复制到服务器上:

    ssh-copy-id -i ~/.ssh/id_rsa.pub user@server.example.com
    

    或者手动将公钥内容追加到服务器的~/.ssh/authorized_keys文件中。

  2. 如果服务器上.ssh目录不存在,你需要创建它,并确保其权限正确(通常为700):

    ssh user@server.example.com mkdir -p ~/.ssh && chmod 700 ~/.ssh
    
  3. 确保authorized_keys文件权限正确(通常为600):

    ssh user@server.example.com chmod 600 ~/.ssh/authorized_keys
    

配置服务器端

  1. 打开服务器上的sshd_config文件,确保PubkeyAuthentication选项设置为yes

    PubkeyAuthentication yes
    

    如果AuthorizedKeysFile行存在,确保它指向正确的文件:

    AuthorizedKeysFile      .ssh/authorized_keys
    
  2. 重启SSH服务以应用更改:

    sudo systemctl restart ssh
    

测试免密码登录

  1. 在客户端尝试使用新生成的密钥对无密码登录服务器:
    ssh user@server.example.com
    
    如果一切配置正确,你应该可以直接登录,无需输入密码。

通过上述步骤,你就可以成功更改SSH服务端口并配置SSH公钥和私钥进行身份验证。这不仅提高了SSH连接的安全性,还提供了更方便的无密码登录方式。

理解ssh公钥和私钥

SSH(Secure Shell)的公钥和私钥是一对用于实现非对称加密的密钥,它们在身份验证和数据加密过程中扮演着重要角色。下面是对公钥和私钥的主要区别的详细解释:

公钥(Public Key)

  • 公开性:公钥是公开的,可以安全地分发给任何人。它的主要作用是在加密数据时使用,任何人都可以用你的公钥加密数据,但只有对应的私钥才能解密这些数据。
  • 加密功能:当别人向你发送数据时,他们使用你的公钥对数据进行加密。这样即使数据在网络中被截获,没有对应的私钥也解密不了。
  • 身份验证:在SSH中,公钥还用于验证你的身份。当你的私钥与服务器上存储的公钥匹配时,你就可以登录到服务器,而无需输入密码。

私钥(Private Key)

  • 保密性:私钥必须严格保密,不能让其他人知道。它是用来解密由公钥加密的数据的,同时也是用于证明你就是公钥的合法所有者。
  • 解密功能:私钥用于解密那些使用公钥加密的数据。由于私钥与公钥成对出现,所以只有对应的私钥能够解密公钥加密的数据。
  • 签名验证:私钥也可以用于生成数字签名,证明数据的来源和完整性。接收方可以通过公钥验证这个签名。

理解SSH中的公钥和私钥

在SSH中,公钥和私钥的工作流程如下:

  1. 密钥生成:在你的本地计算机上生成一对公钥和私钥。
  2. 公钥分发:将公钥添加到你想要无密码访问的远程服务器上,通常是在~/.ssh/authorized_keys文件中。
  3. 登录尝试:当你使用SSH连接到服务器时,你的客户端会向服务器发送你的公钥。
  4. 身份验证:服务器会检查是否有一条记录匹配你的公钥。如果有,服务器会发送一个只有你的私钥才能解密的信息。
  5. 私钥验证:你的SSH客户端使用你的私钥解密这个信息,并将结果发送回服务器。
  6. 登录成功:如果服务器确认解密结果正确,就会让你登录。

总结

公钥和私钥在SSH中实现了强大的安全特性,即允许你安全地登录到远程服务器而无需每次输入密码,同时也保护了数据在传输过程中的安全。理解这两者的区别对于维护系统的安全性至关重要。

相关文章

网友评论

      本文标题:ssh安装、介绍、配置手把手级教程

      本文链接:https://www.haomeiwen.com/subject/efeffdtx.html