SSH 详解(实践及应用)

article/2025/9/15 23:23:54

目录

1.SSH 基本知识

2.SSH 客户端

2.1 安装

2.2 基本用法

2.3 命令行配置项

2.4 配置文件

3 SSH 密钥

3.1 密钥生成

3.2 公钥上传

4 SSH 代理

4.1 动态转发

4.2 本地转发

4.3 远程转发

4.4 实际运用

5 SCP命令

5.1 本地复制到远程

5.2 远程复制到本地

5.3 两个远程系统间的复制

6 Rsync 命令 

6.1 安装

6.2 基本用法

6.3 远程同步

本地同步到远程服务器

远程服务器同步到本地

7 SFTP 命令


1.SSH 基本知识

        Secure Shell (安全外壳协议,简称 SSH )是一种加密的 网络传输协议 ,可在不安全的网络中为网络服务提供安全的传输环境 。

2.SSH 客户端

2.1 安装

        OpenSSH 的客户端是二进制程序 ssh。它在 Linux/Unix 系统的位置是/usr/local/bin/ssh,Windows 系统的位置是\Program Files\OpenSSH\bin\ssh.exe        

        查看是否安装了 ssh 服务

ssh -V

2.2 基本用法

# 基本命令
ssh hostname
# 指定登录用户
ssh user@hostname
# 不用 @ 分隔
ssh -l user hostname
# 指定端口号(默认 22)
ssh -p port user@hostname
# 配置用户,主机名和端口
# node1 需要配置在 Users/用户名/.ssh/config 配置文件中
# Host node1
#	Hostname xxx.xxx.xxx.xxx
#	Port port
#	User roots
ssh node1
# 执行远程命令
ssh user@hostname command
# 需要互动式 shell 环境
ssh -t user@hostname command

2.3 命令行配置项

  • -c 指定加密算法
  • -C 表示压缩数据传输
  • -D 动态转发
  • -f ssh 连接在后台运行
  • -F 指定配置文件 默认为  ~/.ssh/config
  • -i 指定私钥
  • -l 指定用户名
  • -L 本地端口转发
  • -m 指定校验数据完整性算法
  • -N 只用于端口转发,不能执行远程命令
  • -o 添加一个配置命令
  • -p 指定端口号
  • -q 安静模式,不会输出任何警告信息
  • -R 远程端口转发
  • -t 提供一个交互式环境
  • -v 显示详细信息
  • -V 查看版本信息
  • -X 打开 X 窗口
  • -1,-2 指定 ssh 协议版本
  • -4,-6 指定 ipv4 还是 ipv6

2.4 配置文件

        SSH 客户端的全局配置文件是/etc/ssh/ssh_config,用户个人的配置文件在~/.ssh/config,优先级高于全局配置文件。

        除了配置文件,~/.ssh目录还有一些用户个人的密钥文件和其他文件。下面是其中一些常见的文件。

  • ~/.ssh/id_ecdsa:用户的 ECDSA 私钥。
  • ~/.ssh/id_ecdsa.pub:用户的 ECDSA 公钥。
  • ~/.ssh/id_rsa:用于 SSH 协议版本2 的 RSA 私钥。
  • ~/.ssh/id_rsa.pub:用于SSH 协议版本2 的 RSA 公钥。
  • ~/.ssh/identity:用于 SSH 协议版本1 的 RSA 私钥。
  • ~/.ssh/identity.pub:用于 SSH 协议版本1 的 RSA 公钥。
  • ~/.ssh/known_hosts:包含 SSH 服务器的公钥指纹。

        例举一些配置

  • AddressFamily inet:表示只使用 IPv4 协议。如果设为inet6,表示只使用 IPv6 协议。
  • BindAddress 192.168.10.235:指定本机的 IP 地址(如果本机有多个 IP 地址)。
  • CheckHostIP yes:检查 SSH 服务器的 IP 地址是否跟公钥数据库吻合。
  • Ciphers blowfish,3des:指定加密算法。
  • Compression yes:是否压缩传输信号。
  • ConnectionAttempts 10:客户端进行连接时,最大的尝试次数。
  • ConnectTimeout 60:客户端进行连接时,服务器在指定秒数内没有回复,则中断连接尝试。
  • DynamicForward 1080:指定动态转发端口。
  • GlobalKnownHostsFile /users/smith/.ssh/my_global_hosts_file:指定全局的公钥数据库文件的位置。
  • Host server.example.com:指定连接的域名或 IP 地址,也可以是别名,支持通配符。Host命令后面的所有配置,都是针对该主机的,直到下一个Host命令为止。
  • HostKeyAlgorithms ssh-dss,ssh-rsa:指定密钥算法,优先级从高到低排列。
  • HostName myserver.example.com:在Host命令使用别名的情况下,HostName指定域名或 IP 地址。
  • IdentityFile keyfile:指定私钥文件。
  • LocalForward 2001 localhost:143:指定本地端口转发。
  • LogLevel QUIET:指定日志详细程度。如果设为QUIET,将不输出大部分的警告和提示。
  • MACs hmac-sha1,hmac-md5:指定数据校验算法。
  • NumberOfPasswordPrompts 2:密码登录时,用户输错密码的最大尝试次数。
  • PasswordAuthentication no:指定是否支持密码登录。不过,这里只是客户端禁止,真正的禁止需要在 SSH 服务器设置。
  • Port 2035:指定客户端连接的 SSH 服务器端口。
  • PreferredAuthentications publickey,hostbased,password:指定各种登录方法的优先级。
  • Protocol 2:支持的 SSH 协议版本,多个版本之间使用逗号分隔。
  • PubKeyAuthentication yes:是否支持密钥登录。这里只是客户端设置,还需要在 SSH 服务器进行相应设置。
  • RemoteForward 2001 server:143:指定远程端口转发。
  • SendEnv COLOR:SSH 客户端向服务器发送的环境变量名,多个环境变量之间使用空格分隔。环境变量的值从客户端当前环境中拷贝。
  • ServerAliveCountMax 3:如果没有收到服务器的回应,客户端连续发送多少次keepalive信号,才断开连接。该项默认值为3。
  • ServerAliveInterval 300:客户端建立连接后,如果在给定秒数内,没有收到服务器发来的消息,客户端向服务器发送keepalive消息。如果不希望客户端发送,这一项设为0。
  • StrictHostKeyChecking yes:yes表示严格检查,服务器公钥为未知或发生变化,则拒绝连接。no表示如果服务器公钥未知,则加入客户端公钥数据库,如果公钥发生变化,不改变客户端公钥数据库,输出一条警告,依然允许连接继续进行。ask(默认值)表示询问用户是否继续进行。
  • TCPKeepAlive yes:客户端是否定期向服务器发送keepalive信息。
  • User userName:指定远程登录的账户名。
  • UserKnownHostsFile /users/smith/.ssh/my_local_hosts_file:指定当前用户的known_hosts文件(服务器公钥指纹列表)的位置。
  • VerifyHostKeyDNS yes:是否通过检查 SSH 服务器的 DNS 记录,确认公钥指纹是否与known_hosts文件保存的一致

3 SSH 密钥

3.1 密钥生成

# 以 rsa 算法为例
ssh-keygen -t rsa

        生成的密钥文件默认就会是~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)。

3.2 公钥上传

        用户公钥保存在服务器的 ~/.ssh/authorized_keys文件

        所以需要将刚生成的密钥中的公钥文件 (id_rsa.pub)  复制到需要登录的ssh服务器的 ~/.ssh/authorized_keys 文件中

        如果不想复制,也可以通过命令行完成

# 也可以通过命令行来上传
ssh-copy-id -i key_file user@hostname

        至此,已经完成 SSH 的最基本的功能 - 免密登录目标服务器

        当然, ssh 的功能不仅于此

4 SSH 代理

4.1 动态转发

        动态转发指的是,本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发。它的一个使用场景就是,访问所有外部网站,都通过 SSH 转发。

ssh -D local-port root@remote-host -p remote-port -N
  • -D 动态转发
  • local-port 本地端口
  • remote-host ssh 服务器 ip
  • remote-port ssh 服务器 端口号
  • -N 只进行端口转发,不建立 SSH 通道连接

        这种转发采用了 SOCKS5 协议。访问外部网站时,需要把 HTTP 请求转成 SOCKS5 协议,才能把本地端口的请求转发出去。

curl -x socks5://localhost:2121 https://www.baidu.com

4.2 本地转发

        本地转发(local forwarding)指的是,SSH 服务器作为中介的跳板机,建立本地计算机与特定目标网站之间的加密连接。

ssh -L local-port:target-host:target-port root@remote-host -p remote-port
  • -L 本地转发
  • local-port 本地端口
  • target-host 目标地址
  • target-port 目标端口
  • remote-host ssh服务器地址
  • remote-port ssh服务器端口
ssh -L 3306:127.0.0.1:3306 -p 40022 root@xx.xx.xx.xx

4.3 远程转发

        它跟本地转发正好反过来。建立本地计算机到远程计算机的 SSH 隧道以后,本地转发是通过本地计算机访问远程计算机,而远程转发则是通过远程计算机访问本地计算机。

ssh -R remote-port:target-host:target-port -N root@remote-host -p remote-port

4.4 实际运用

        可以搭建一个简易 VPN

        处于安全考虑,我们一般不会将 mysql,redis 等数据库中间件的端口号暴露出来,此时就可以通过本地转发来进行访问

# 本地的3306,6379 端口转发到目标服务器(开发机)的3306,6379 端口
ssh -NL 3306:127.0.0.1:3306 -NL 6379:127.0.0.1:6379 -p 22 user@xx.xx.xx.xx

        又或者,有些第三方服务部署在内网服务器B,本地只能访问内网服务器A,而A,B之间是互通的。

ssh -NL 80:B-host:80 user@A-host:A-port

5 SCP命令

        scp是 secure copy 的缩写,相当于cp命令 + SSH,底层还是 SSH 协议

5.1 本地复制到远程

# 基本语法
scp -P port source user@hostname:target
# 将本机整个目录拷贝到远程目录下
scp -r ./dir user@hostname:/remote_dir/
# 将本机目录下的所有内容拷贝到远程目录下
scp -r .dir/* user@hostname:/remote_dir/

5.2 远程复制到本地

# 基本语法
scp user@hostname:source target
# 拷贝一个远程目录到本机目录下
scp -r user@hostname:/remote_dir .dir/
# 拷贝远程目录下的所有内容,到本机目录下
scp -r user@hostname:/remote_dir/* .dir/

5.3 两个远程系统间的复制

# 基本语法
scp user@hostname1:source user@hostname2:target

6 Rsync 命令 

        rsync 是一个常用的 Linux 应用程序,用于文件同步

        它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。

6.1 安装

        linux 系统

# Debian
sudo apt-get install rsync# Red Hat
sudo yum install rsync# Arch Linux
sudo pacman -S rsync

        windows 系统

        小编没有找到 rsync windows 的版本,但是找到一个叫 cwRsync 的软件,看名字应该是基于 Cygwin 和 rsync 的一个软件。但是官方好像已经不提供免费的版本了。

6.2 基本用法

rsync -r source destination
  • -r        递归,包含子目录
  • -a       类似于 -r,还可以同步元信息(修改时间,权限等)
  • -n       可以看到哪些内容会被同步,通常与 -v 一起使用
  • -v       输出到终端
  • --delete    会删除在 destination 中的,但不在 source 的
  • --exclude  排除文件
# 排除某个目录下的
rsync -av --exclude 'dir1/*' source/ destination
# 多个排除
rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
# 排除多个,记录在文件中
rsync -av --exclude-from='exclude-file.txt' source/ destination
  • --include   通常与 --exclude 一起使用

6.3 远程同步

本地同步到远程服务器

rsync -av source/ username@remote_host:destination

远程服务器同步到本地

rsync -av username@remote_host:source/ destination

7 SFTP 命令

        sftp是 SSH 提供的一个客户端应用程序,主要用来安全地访问 FTP。因为 FTP 是不加密协议,很不安全,sftp就相当于将 FTP 放入了 SSH

sftp username@hostname

        

        进入 sftp 交互界面,类似于 ftp

  • ls [directory]:列出一个远程目录的内容。如果没有指定目标目录,则默认列出当前目录
  • cd directory:从当前目录改到指定目录
  • mkdir directory:创建一个远程目录
  • rmdir path:删除一个远程目录
  • put localfile [remotefile]:本地文件传输到远程主机
  • get remotefile [localfile]:远程文件传输到本地
  • help:显示帮助信息
  • bye:退出 sftp
  • quit:退出 sftp
  • exit:退出 sftp

        操作本地的文件命令前加个 l, 如 lls , lcd , lmkdir 等

注意到一些常用的 linux 文件传输工具走的大多也是 sftp 协议

如 filezilla


http://chatgpt.dhexx.cn/article/1njmA67b.shtml

相关文章

H3C双向NAT典型组网配置案例

组网说明: 本案例采用H3C HCL模拟器来模拟实现双向NAT的组网,由于模拟器和本物理机的局限性,因此采用模拟器的S5820交换机开启WEB功能模拟成为WEB服务器。在该网络拓扑图中,内网和外网已经有了明确的标识,某局点申请了…

基于华三HCL模拟器IPSec VPN组网与配置

一、实验原理 IPsec在互联网中提供端到端的数据报通信安全,通过加密和认证方式保护IP数据报及其封装的数据。IPsec是一个框架协议,包括AH、ESP、SA、IKE等协议。IPsec可以采用直接传输和隧道封装两种模式工作,在通过互联网承载的站点间VPN中…

华为IPSec VPN的配置

目录 概念 阶段一 阶段二 IPSec的配置实验 先进行基配置,保证路由可达 配置阶段一 配置ike提案 配置ike邻居 配置阶段二 定义感兴趣流 把ipsec策略应用到接口 结果测试 概念 IPSec是一个框架,它不是具体指某个协议,而是定义了一个框…

【组网工程】cisco packet tracer 路由器组网

验证性 | 设计性 路由器组网 正文开始Assassin目录: 验证性 | 设计性 路由器组网1. 静态路由和默认路由配置:1.1 配置ip地址 | ping:1.2 配置静态路由 | 默认路由: 2. RIP路由协议配置:2.1 配置ip地址 | ping&#xf…

MPLS 网络技术 — 组网方案

目录 文章目录 目录单域 MP-BGP MPLS VPN基本组网方案Hub & Spoke 组网方案Extranet 组网方案跨域 MP-BGP MPLS VPNInter-Provider Backbones Option AInter-Provider Backbones Option BInter-Provider Backbones Option C单域 MP-BGP MPLS VPN 单域 MP-BGP MPLS VPN 在一…

常见组网方式

随着家庭上网场景的不断增多,客厅、书房、卧室渐渐都需要接入网络,单独路由器Wi-Fi已无法全覆盖,而多台路由器组网技术的出现,极大改善了家庭的上网体验。经过多年的演进,从传统的中继组网、ACAP组网、电力猫组网&…

综合组网实例配置 双出口双墙主备+三层核心VRRP+MSTP+NAT+NAT SERVER+AC+IPsec+广域网PPPOE+专线

一、 组网需求 企业的两台FW的业务接口都工作在三层,使用路由模式进行部署,上下行分别连接交换机。上行交换机连接路由器,下行连接核心交换机。路由器连接二个运营商的接入点,运营商其一为企业提供专线业务,其分配的IP地址为202.1…

Keepalived高性能集群软件详解

一、高可用集群HA 1、高可用集群简介 高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断地提供服务,把因为软件,硬件,人为造成的故障对业务的影响降低到最小程度。总而言之就…

了解集群、集群的分类、常用的集群软硬件及选型介绍(内附详细图解)

Table of Contents 一、集群简介 二、集群的七大优点 三、集群的分类 四、常用的集群软硬件及选型介绍 一、集群简介 集群就是一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点&…

高可用 - 01 闲聊高性能集群

文章目录 什么是集群集群的特点与功能1. 高可用性与可扩展性2. 负载均衡与错误恢复3. 心跳监测与漂移IP地址 集群的分类1. 高可用集群高可用的概念常见的HA集群双机冷备双机热备双机互备多机互备 高可用集群软件 2. 负载均衡集群3. 分布式计算集群 HA集群中的相关术语1&#xf…

集群管理

集群管理 应用集群中,我们常常需要让每一个机器知道集群中(或依赖的其他某一个集群)哪些机器是活着的,并且在集群机器因为宕机,网络断链等原因能够不在人工介入的情况下迅速通知到每一个机器。 Zookeeper同样很容易实…

CentOS8系统安装LSF集群管理软件

一、什么是LSF? LSF(Load Sharing Facility)是IBM旗下的一款分布式集群管理系统软件,负责计算资源的管理和批处理作业的调度。常用的分布式集群管理系统软件有PBS、SLURM、LSF。 二、安装环境(虚拟机) 主机…

集群解决方案

集群概念 集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它…

集群集群

一、什么是集群 集群(Cluster )是将多个单独存在的服务器,通过集群技术将其集合,构成一个工作组、一台大型的服务器,以单一系统的模式加以管理。 简而言之,集群就是将多台机器组合成一台机器使用。 二、…

集群监控

文章目录 一、监控简介1.1 重要性1.2 常见监控平台1.2.1 Cacti1.2.2 Nagios1.2.3 Zabbix 二、Cacti 监控服务器2.1 组件构成2.1.1 SNMP2.1.2 RRDtool2.1.3 工作架构 2.2 Cacti 监控组件安装配置2.2.1 安装环境(10.10.10.11)2.2.2 安装 rrdtool (10.10.10.11)2.2.3 部署 cacti&a…

群集技术:三款主流服务器集群软件

1、ROSE HA 服务器集群软件 在双机热备的架构中,除了要考虑切换时间外,要根据每个系统的作业环境,包括网路系统是单网或是双 网,数据库的安装和作业内容及用户端的设备是经由广域网路、区域网路接入不同用户有不同的需求&#x…

常见集群(Cluster)软件和技术解析

集群就是通过软件将一组服务器作为一个整体向客户提供资源。这些单个的服务器就是集群的节点。当对外提供资源的节点故障后,集群中其余的节点能够将资源接管起来,继续对客户提供资源。 集群技术的核心就是资源访问控制。由于集群中所有节点都可以访问集群…

【集群】集群的概念(相关知识)、常用工具/算法、常见集群

文章目录 前言一、集群架构1.1 负载调度器1.1.1 常用调度算法1.1.2 LVS模块 1.2 节点服务器1.3 共享储存1.3.1 NFS共享储存1.3.2 NAS存储设备 二、集群2.1 负载均衡2.1.1 定义2.1.2 负载均衡搭建 2.2 高可用2.2.1 定义2.2.2 高可用集群搭建 2.3 高性能运算群集 三、ipvsadm工具…

集群测试工具

DFSIO测试集群I/O性能 DFSIO 用法 hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.X-tests.jar TestDFSIO 15/05/22 19:50:22 INFO fs.TestDFSIO: TestDFSIO.1.8 Missing arguments. Usage: TestDFSIO [genericOptions] -read […

集群监视软件Ganglia

什么是ganglia Ganglia监控软件主要是用来监控系统性能的软件,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到…