🔬
JTZ
  • 启航
    • 💻介绍
    • 🔧路径以及总结
    • 🏆日记
      • 😀2022-12-26
      • 😀2022-11-13
      • 😀2022-11-4
  • 网络&系统
    • 🔧端口&协议
      • NFS 介绍
      • Kerberos 介绍
      • WINRM 介绍
      • Telnet 协议
      • CDN 介绍
      • ICMP 介绍
      • DNS
      • RDP
      • SNMP
      • FTP
      • SMB
      • WMI
      • SSH
    • 🔧计算机网络
      • 计算机网络
        • 什么是网络
          • 什么是网络
          • 什么是交换机
          • 什么是路由器
          • 什么是防火墙
        • Model
          • 什么是TCP/IP模型?什么是OSI模型?
        • IP
          • IP地址
      • 资源
        • Postman
        • 思科模拟器 8.2
        • Cisco Packet Tracer
        • 视频
        • WireShark
      • 协议
        • MAC
        • DHCP
        • 端口转发
        • ARP
        • ICMP
      • 第一章--概述
      • 第二章--物理层
      • 第三章--数据链路层
      • 第四章--网络层
      • 第五章--传输层
      • 第六章--应用层
    • 🔧操作系统
    • 🔧Windows
      • 工具
        • WSL 安装 kail
          • Windows 端口转发 WSL 流量
          • 使用远程桌面连接 kali
        • VMware
        • WizTree
        • Beyond Compare 4
        • 画图软件
        • 记笔记软件
          • Typora 插件
          • Typora 图床
        • 文本编辑器
        • 视频播放器
        • VPN
        • 录屏工具
        • Wise Disk Cleaner
        • WinHex
        • Custom Cursor
        • RAMMap
        • Snipaste
        • PowerTotys
        • 浏览器
          • 浏览器插件
      • Windows
    • 🔧Linux
      • 杂类
        • linux中mnt,media以及dev目录的区别
        • 如何在 SSH 身份验证后运行脚本
        • 探索 Reverse SHELL
        • 恢复文件
        • PID 介绍
        • sudo配置文件/etc/sudoers
        • 定时任务
      • 权限
        • Linux 访问控制列表 (ACL) 简介
      • 目录
        • /mnt
        • /media
        • /etc
        • /usr
        • /proc
      • 工具推荐
        • linux下使用clash(GUI)
        • 终端模拟程序
      • Linux命令
        • 查看文件信息
        • 磁盘信息
      • Linux
  • 工具
    • 🔧端口&服务
      • 22 -- SSH
        • ssh-audit
      • 25/465/587 -- SMTP/s
        • SMTP 命令
        • sendEmail
        • swaks
      • 53 -- DNS
      • 80/443 -- WEB 服务
        • CURL
        • CMS
          • droopescan
          • JoomlaScan
          • WPScan
        • 扫描工具
          • feroxbuster
          • WFUZZ
          • gobuster
          • FFUF
      • 88 tcp/udp -- Kerberos
      • 139/445 -- SMB
        • enum4linux-ng
        • smbClient
        • smbmap
        • rpcclient
      • 873--Rsync
        • Rsync
      • 2049-TCP/UDP-NFS
        • NFS no_root_squash/no_all_squash 错误配置
      • 5985/5986 -- WINRM
        • evil-winrm
        • 内网移动
      • 云服务
        • AWS
    • 端口扫描
      • masscan
      • nmap
        • 研究
        • nmap-common
        • ndiff
        • nping
    • SHELL
      • Windows 交互 SHELL
      • pwncat-cs
      • Netcat
      • MSF
      • Socat
    • 脚本工具包
      • 🔧Impacket
        • Hunting for Impacket
    • 📖字典
      • CEWL
    • 自动化扫描工具
      • nikto
      • SQLMAP
    • 密码&解密&爆破
      • 识别 Hash
        • hash-identifier
        • hashid
      • 破解 Hash
        • John
        • Hashcat
        • Hydra
      • DomainPasswordSpray
    • 渗透框架工具
      • Searchsploit
      • Metasploit
        • Msfvenom
    • 文件
      • Imagemagick
      • Exiftool
    • 开发工具
      • Git
    • 浏览器
      • 浏览器密码&历史等信息
    • crackmapexec
    • OPENSSL
      • Heartbleed
    • 文件隐写术
      • binwalk
      • Exiftool
      • Steghide
    • 频谱分析
  • 🛸权限提升
    • 🔧Active Directory
      • 🦯AD 枚举和攻击 -- 工具
        • BloodHound
        • Kerbrute
    • 🔧Windows
      • 🦯Windows 权限提升工具
    • 🔧Linux
      • 提权
        • Linux 提权思路
        • Linux 提权备忘录
      • 资料
        • Linux 权限: SUID, SGID, sticky
      • 🦯Linux 提权工具
        • 📱Pspy
  • 🕶️HTB 学院
    • SHELLS&Payloads
    • 文件传输
    • 足迹
    • Pivoting &隧道和端口转发
    • 密码攻击
  • 🖥️WEB 渗透测试
    • 命令注入(RCE)
      • 🚚资源
    • 身份验证
    • 信息泄露
      • 信息泄露工具
    • XXE
      • 资源
      • XML 介绍
    • XSS
      • 资源
    • IDOR
    • CORS
      • 资源
    • IDOR
    • SSRF
      • 资源
    • Page 1
    • 目录遍历
    • 访问控制
    • 文件上传
      • 资源
      • WAF 绕过
    • 点击劫持
    • CSRF
      • 资源
        • 同源策略
    • SSTI
      • 资源
    • WebSocket
    • 逻辑缺陷
    • 反序列化
    • 文件包含
      • /proc/self/envirom
    • 文件隐写术
  • 🔧编程语言
    • 编程工具
      • Vs-Code
      • Jetbrains
      • Navicat Premium 15
    • C/C++
      • Linux C 一站式编程学习
    • Java
      • 资源
        • JDK
        • 画类图软件
    • Python
      • 资源
        • Python 环境
        • Python 虚拟环境
    • SHELL 教程
      • SHELL 教程
      • 高级Bash脚本编程指南
      • 1.1 变量
      • 1.2 特殊字符
      • 1.3 正则表达式
      • 1.4 数组
      • 1.5 字符串
      • 1.6 函数
      • 1.7 循环判断
      • 扩展
        • 执行命令
        • 子 SHELL
  • 🔧云开发
    • 🔧Docker
      • 🔧Docker
  • 🔧信息收集
    • 网站内容
    • OSINT
    • 侦查
      • Shodan.io
      • google 语法
    • 子域枚举
      • dig
  • 🔧逆向
    • 工具
      • GDB
        • PEDA
      • ghidra
  • 🔧杂章
    • 杂章
      • 区域传输
      • XFF&Referer
      • VHOST
      • ASN
      • Shadow Defender
      • WinHex
由 GitBook 提供支持
在本页
  • 前言: SSH介绍
  • 一、中间人攻击
  • 二、 SSH 文件结构
  • 一、基本用法
  • 1. SSH 远程登录 -- 口令
  • 2. SSH 远程登录 -- 公钥
  • 3. 持久连接 SSH
  • 二、 SSH 远程操作
  • 1. SSH 数据传输
  • 2. scp 跨机远程拷贝
  • 3. SSH 端口操作
  • 常用命令
  • 参考文章

这有帮助吗?

在GitHub上编辑
  1. 网络&系统
  2. 端口&协议

SSH

这是讲解关于 SSH 服务的一些信息

前言: SSH介绍

SSH 是一种网络协议,用于计算机之间的加密登陆

一、中间人攻击

SSH 的使用过程:

  1. 远程主机收到用户登陆请求,将自己公钥发给用户

  2. 用户使用公钥将登录密码加密后,发送给远程主机

  3. 远程主机使用自己的私钥,解密登陆密码,如果密码正确,就同意用户登录

如果在实施过程中,有人截获了登录请求,然后冒充远程主机,将伪造的公钥发送给用户,用户无法辨别真伪,当用户发送了密码后,攻击者就可以得到登录密码

二、 SSH 文件结构

  1. id_rsa

    这是 SSH 的私钥,与公钥是一堆的密钥对,用于连接其他服务器使用

  2. id_rsa.pub

    这是 SSH 的公钥,将 A 主机的 id_rsa.pub 文件拷贝到 B 主机的 authorized_keys 文件中,这样 A 主机就可能不通过密码连接 B 主机

  3. authorized_keys (授权文件)

    实现真正无密码连接,即为授权文件,当把master的公钥添加到 authorized_keys 文件中后,下次连接直接输入ssh master即可,不需要再次输入密码

    1. 单向:将 A 主机的 id_rsa.pub 文件拷贝到 B 主机的 authorized_keys 就可以使 A 无密码连接 B 主机

    2. 双向:将 A、B 主机的 id_rsa.pub 文件都写入彼此 authorized_keys 中就可以实现双向登录

  4. known_hosts ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

一、基本用法

1. SSH 远程登录 -- 口令

ssh user@IP [-p ]

2. SSH 远程登录 -- 公钥

公钥登录定义: 用户将自己的公钥储存在远程主机上,登录时远程主机就会向用户发送一段随机字符串,用户使用自己的公钥进行加密后,在发送回来,远程主机使用事先储存的私钥进行解密,如果成功就证明用户是可信的

# 生成公钥,运行结束后会在 $HOME/.ssh/ 目录下生成 id_rea.pub 和 id_rsa ,前者为公钥,后者为私钥
ssh-keygen
# 检查是否已经添加对应主机的密钥
ssh-keygen -F 10.42.0.47
# 删除对应主机密钥
ssh-keygen -R 10.42.0.47
# 将公钥传送到远程主机上
ssh-copy-id user#IP

3. 持久连接 SSH

如果使用 iTerm2 连接 SSH 时,要求不断线需要做以下配置

vi ~/.ssh/config
# 添加下方语句
Host *
    ServerAliveInterval 30  # SSH  客户端每 30 秒发送一个 no-op 包给远程主机

二、 SSH 远程操作

1. SSH 数据传输

# 将 $HOME/src/ 目录下的文件复制到远程主机的 $HOME/src/ 目录
cd && tar czv src | ssh user@host 'tar xz'
# 将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
ssh user@host 'tar cz src' | tar xzv
# 查看远程主机是否运行进程httpd, 单引号中的内容就是要指定的命令
ssh user@host 'ps ax | grep [h]ttpd'

2. scp 跨机远程拷贝

scp 用于在 Linux 下进行远程拷贝文件的命令,传输的时候加密其内容

scp -help
# 命令参数
    -1 强制scp命令使用协议ssh1
    -2 强制scp命令使用协议ssh2
    -4 强制scp命令只使用IPv4寻址
    -6 强制scp命令只使用IPv6寻址
    -B 使用批处理模式(传输过程中不询问传输口令或短语)
    -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    -p 留原文件的修改时间,访问时间和访问权限。
    -q 不显示传输进度条。
    -r 递归复制整个目录。
    -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    -l limit 限定用户所能使用的带宽,以Kbit/s为单位。
    -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
    -P port 注意是大写的P, port是指定数据传输用到的端口号
    -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项

# 本机复制远程文件
scp root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz
# 远程复制本地文件
scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz
# 本地复制远程文件夹
scp -r root@www.test.com:/val/test/ /val/test/
# 远程复制本地文件夹
scp -r ./ubuntu_env/ root@192.168.0.111:/home/pipi
# 本地复制远程文件到指定目录
scp root@www.test.com:/val/test/test.tar.gz /val/test/
# 远程复制本地文件到指定目录
scp /val/test.tar.gz root@www.test.com:/val/
# 在两个远程主机之间复制文件
scp user1@remotehost1:/some/remote/dir/foobar.txt user2@remotehost2:/some/remote/dir/

3. SSH 端口操作

1. 绑定本地端口

# SSH 会建立一个 SOCKET ,去监听本地 8080端口,一旦有数据传向那个端口,就自动转移到 SSH 连接上面,发往远程主机
ssh -D 8080 user@host

2. 本地端口转发

假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2

# 在 host1 指定下面命令
# 本地端口:目标主机:目标主机端口
# 作用: 指定 SSH 绑定本地端口 2121,然后指定 host3 将所有数据转发到目标主机 host2 的 21 端口
ssh -L 0.0.0.0:2121:host2:21 host3

3. 远程端口转发

host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。

# 在 host3 执行下面命令
# 执行命令后, host1 监听 2121 端口,host 3 就会发起请求建立连接,数据就会经过 host3 传送给 host2
ssh -R 2121:host2:21 host1

常用命令

# 复制 SSH 密钥到目标主机,开启无密码 SSH 登录
ssh-copy-id user@host
# 从某主机的80端口开启到本地主机2001端口的隧道
ssh -N -L2001:localhost:80 somemachine
# 将你的麦克风输出到远程计算机的扬声器
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
# 比较远程和本地文件
ssh user@host cat /path/to/remotefile | diff /path/to/localfile –
# 通过SSH挂载目录/文件系统
sshfs name@server:/path/to/folder /path/to/mount/point
# 通过中间主机建立SSH连接
ssh -t reachable_host ssh unreachable_host
# 直接连接到只能通过主机B连接的主机A
ssh -t hostA ssh hostB
# 通过SSH连接屏幕
ssh -t remote_host screen –r
# 端口检测
knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000
# 通过SSH运行复杂的远程shell命令
ssh host -l user $(<cmd.txt)
# 通过SSH将MySQL数据库复制到新服务器
mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME | ssh -C user@newhost “mysql -uUSER -pPASS NEW_DB_NAME”
# 建立一个可以重新连接的远程GNU screen
ssh -t user@some.domain.com /usr/bin/screen –xRR
# SCP大文件
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local -> remote
rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file remote -> local
# 通过SSH W/ WIRESHARK分析流量
ssh root@server.com ‘tshark -f “port !22″ -w -' | wireshark -k -i –
ssh root@example.com tcpdump -w – ‘port !22′ | wireshark -k -i –
# 保持 SSH 会话永久打开
autossh -M50000 -t server.example.com ‘screen -raAd mysession’
# 将标准输入(stdin)复制到你的X11缓冲区
ssh user@host cat /path/to/some/file | xclip

参考文章

上一页WMI下一页计算机网络

最后更新于2年前

这有帮助吗?

🔧
SSH原理与运用(一):远程登录
iTerm2中ssh保持连接不断开
12个scp传输文件的命令栗子
scp 跨机远程拷贝