news 2026/5/5 2:30:28

ssh命令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ssh命令

一.SSH概念

Linux中的Secure Shell即SSH主要的作用是通过加密的网络协议,安全地远程登入和执行命令。

具体的作用:

1.安全的远程管理

替代不安全的Telnet(早期互联网中使用的一种远程登入协议,核心功能与SSH一致,都是让用户从本地计算机连接并操作远程主机,但Telnet最大的问题是所有的数据透明,不加密)。

典型场景:管理员在家通过SSH连接的公司机房的Linux服务器,进行维护、查看日志、配置软件等

2.安全的文件传输

基于SSH协议,可以安全地复制文件,内置命令有:

  • scp(Secure Copy):像cp命令一样在本地/远程间复制文件
  • sftp(SSH File Transfer Protocol):类似FTP,但全程加密,是更加安全交互式文件管理方式

典型场景:将网站代码从开发机上传到部署服务器,或从服务器下载数据库备份

3.端口转发(加密隧道)

4.安全的身份验证方式

  • 常规方式:密码登入
  • 公钥登入:生成密钥对,登入时无需输入密码,且无法通过暴力破解密码

二.SSH命令

SSH工具集主要包括三个最常用的命令:ssh(远程登入)、scp(复制文件)、sftp(传输文件)。另外还会涉及生成密钥的ssh-keygen。

1.ssh远程登入

基本语法:

ssh [选项] 用户名@主机地址

常用示例:

命令说明
ssh root@192.168.1.100使用 root 用户登录 IP 为 192.168.1.100 的服务器
ssh user@example.com -p 2222指定端口 2222 登录(默认端口是 22)
ssh user@server "ls -la"登录后直接执行一条命令,然后退出(不进入交互式 shell)
ssh -v user@server显示详细的连接调试信息(用于排错)

Hadoop中遇到的例子:

[root@master ~]# for host in master slave1 slave2; do > echo "--------------- $host -------------------" > ssh $host jps > done
----------------- master ------------------ 3364 ResourceManager 3764 JobHistoryServer 3114 SecondaryNameNode 5642 Jps 2845 NameNode ----------------- slave1 ------------------ 2792 NodeManager 2681 DataNode 4653 Jps ----------------- slave2 ------------------ 4643 Jps 2694 DataNode 2806 NodeManager

上面这个脚本是一个for循环,用于在三台机器(master、slave1、slave2)上分别执行jps命令

代码含义
1for host in master slave1 slave2; do定义一个循环变量host,它会依次取值为masterslave1slave2
2echo "================ $host ================="打印分隔线,显示当前正在检查哪台机器
3ssh $host jps通过 SSH 登录到$host这台机器,并执行jps命令
4done循环结束

注意事项:

  • 这个脚本能执行的前提是master机器已经配置好到slave1、slave2的SSH免密登入(使用公钥认证),否则每次连接都会要求输入密码
  • 如果jps不在系统PATH中,则需要写出完整路径
[root@master ~]# $JAVA_HOME -bash: /usr/java/jdk1.8.0_281-amd64: Is a directory [root@master ~]# echo $JAVA_HOME /usr/java/jdk1.8.0_281-amd64 [root@master ~]# which jps /usr/bin/jps

上述脚本也可以写成一行:

for host in master slave1 slave2; do echo "===== $host ====="; ssh $host jps; done

其实,脚本的ssh命令完整且标准的写法是:

ssh root@$host jps

ssh $host jps

是简化写法,省略了用户名@,此时SSH会自动使用你当前所在的本地用户名作为远程登入的用户名

2.scp安全复制文件

基本语法:

# 本地 → 远程 scp [选项] 本地文件 用户名@主机:远程路径 # 远程 → 本地 scp [选项] 用户名@主机:远程文件 本地路径

先在slave1中看一下根目录的结构:

[root@slave1 ~]# cd / [root@slave1 /]# ls bin boot data demo01 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

查看一下master根目录下的一个文件:

[root@master ~]# cd / [root@master /]# ls bin boot data demo01 dev etc home lib lib64 media mnt opt parent proc Projects root run sbin srv sys Tests tmp usr var [root@master /]# cd Tests [root@master Tests]# ls myfile1.txt S Sub [root@master Tests]# cat myfile1.txt 01点26分

把myfile1.txt文件复制到slave1的根目录下:

[root@master Tests]# scp myfile1.txt root@slave1:/ myfile1.txt

这里需要注意:slave1后的冒号后要紧跟目标地址,不能有空格!

[root@slave1 /]# ls bin boot data demo01 dev etc home lib lib64 media mnt myfile1.txt opt proc root run sbin srv sys tmp usr var [root@slave1 /]# cat myfile1.txt 01点26分

使用选项-r递归复制整个文件夹:

[root@slave1 /]# mkdir DIR [root@slave1 /]# echo "HELLO TODAY 2026年5月4日" > /DIR/file.txt [root@slave1 /]# ls bin boot data demo01 dev DIR etc home lib lib64 media mnt myfile1.txt opt proc root run sbin srv sys tmp usr var [root@slave1 /]# cd DIR [root@slave1 DIR]# ls file.txt [root@slave1 DIR]# cat file.txt HELLO TODAY 2026年5月4日
[root@master Tests]# scp -r root@slave1:/DIR /root/ # 将DIR目录递归复制到root用户的家目录,注意区别:/是根目录 file.txt [root@master Tests]# cd / [root@master /]# cd # 切换到当前用户(即root用户)的家目录,cd ~命令也是同样的效果 [root@master ~]# cd [root@master ~]# ls anaconda-ks.cfg data1.txt data3.txt DIR file1.txt hadoop-3.1.4.tar.gz test.txt [root@master ~]# cd DIR [root@master DIR]# ls file.txt [root@master DIR]# cat file.txt HELLO TODAY 2026年5月4日

3.sftp交互式文件传输

基本用法:

sftp 用户名@主机地址

进入后是一个sftp>提示符,支持类似 FTP 的命令

[root@master DIR]# sftp root@slave1 Connected to slave1. sftp> pwd Remote working directory: /root sftp> ls anaconda-ks.cfg sftp> cd / sftp> ls DIR bin boot data demo01 dev etc home lib lib64 media mnt myfile1.txt opt proc root run sbin srv sys tmp usr var sftp> cd DIR/ sftp> ls file.txt sftp> cat file.txt Invalid command. sftp> !cat file.txt HELLO TODAY 2026年5月4日 sftp> exit

cat不是sftp的内置命令。sftp只支持文件传输的基本文件管理操作,不支持查看文件内容这类需要“读取并显示”的操作。

因为sftp的设计目标是“文件传输协议”,而不是远程命令执行

可以在sftp中使用!cat命令查看文件内容

!前缀可以执行本地系统命令,不通过远程。

cat的原理可以概括为:在本地 Shell 中执行命令,而不是通过 SFTP 协议发送到远程服务器

核心原理

sftp客户端程序在运行时,会持续监听你的输入。当它检测到一行以!开头的命令时,会做以下事情:

  1. 识别特殊前缀:识别出!不是标准的 SFTP 协议命令。

  2. 提取命令:将!之后的部分(例如cat /tmp/file.txt)提取出来。

  3. 调用本地 Shell:在你的本地机器上,启动一个新的 Shell 进程(比如shbash)。

  4. 执行命令:将提取出的命令字符串传递给这个本地 Shell 去执行。

  5. 显示结果:将本地 Shell 执行命令的标准输出(stdout)标准错误(stderr)直接显示在你的sftp终端界面上。

  6. 返回 SFTP:命令执行完毕后,关闭临时的 Shell 进程,回到sftp>提示符,等待你的下一个 SFTP 命令。

如果本地master没有file.txt这个文件,!cat file.txt一定会执行失败

[root@master DIR]# cd / [root@master /]# sftp root@slave1 Connected to slave1. sftp> ls anaconda-ks.cfg sftp> cd / sftp> ls DIR bin boot data demo01 dev etc home lib lib64 media mnt myfile1.txt opt proc root run sbin srv sys tmp usr var sftp> cd DIR sftp> ls file.txt sftp> cat file.txt Invalid command. sftp> !cat file.txt cat: file.txt: No such file or directory Shell exited with status 1 sftp>

我第一次是在本地的DIR目录下执行sftp命令来操作slave1虚拟机的,当在sftp程序中输入!cat后会在本地的当前目录执行cat file.txt,而file.txt文件就在DIR目录下,所以执行成功

现在我切换了目录,本地的当前目录不是DIR了,所以再次在sftp上执行就会报错!

sftp 支持的命令列表

命令功能示例
ls列出目录内容ls -la
cd切换远程目录cd /DIR
pwd显示远程当前目录pwd
get下载文件get file.txt
put上传文件put local.txt
rm删除远程文件rm file.txt
rmdir删除远程空目录rmdir emptyDir
mkdir创建远程目录mkdir newDir
mv重命名/移动远程文件mv old.txt new.txt
lls列出本地目录内容lls
lcd切换本地目录lcd /tmp
lpwd显示本地当前目录lpwd
!执行本地 shell 命令!cat /etc/hostname
exitbye退出 sftpexit

4.ssh和sftp的区别

ssh命令除了建立加密通道进行安全的远程登入外(核心功能),还可以远程执行命令(无交互式登入)

而sftp是ssh的一个专门用于“文件传输”的“子功能”

特性sshsftp
全称Secure SHellSSH File Transfer Protocol
主要用途远程命令执行系统交互管理安全文件传输远程文件管理
工作模式登录到远程 Shell 执行命令进入一个专门的sftp>提示符环境
支持命令几乎所有 Linux 命令 (ls,cd,cat,grep等)有限的文件操作命令 (ls,cd,get,put,rm)
交互方式交互式 Shell (如 bash)专用文件传输接口 (类似 FTP)
能否执行系统命令不能 (只能执行sftp内置命令)
共同点都是基于 SSH 协议,数据传输都是安全的都是基于 SSH 协议,数据传输都是安全的
类比瑞士军刀(功能全面,什么都能做)一把高级螺丝刀(只做一件事,但做得很好
  • ssh是基础协议和主命令,用于安全登录和执行一切操作。它的“端口转发”功能更是无可替代。

  • sftpssh的一个子协议和配套工具,专门用于在安全通道下进行文件管理(上传、下载、删除、重命名等)。它比scp更强大、更灵活(支持断点续传、目录列表等)。

  • 日常使用:执行系统命令、配置服务用ssh;传输单个文件用scp;需要交互式浏览和管理远程文件用sftp

ssh完全支持的命令:

命令通过 SSH 执行示例
ls✅ 完全支持ssh root@slave1 "ls -la /DIR"
mkdir✅ 完全支持ssh root@slave1 "mkdir /DIR/newfolder"
rm✅ 完全支持ssh root@slave1 "rm /DIR/file.txt"
rmdir✅ 完全支持ssh root@slave1 "rmdir /DIR/emptyfolder"
cp✅ 完全支持ssh root@slave1 "cp /DIR/file.txt /tmp/"
mv✅ 完全支持ssh root@slave1 "mv /DIR/old.txt /DIR/new.txt"
touch✅ 完全支持ssh root@slave1 "touch /DIR/newfile.txt"
cat✅ 完全支持ssh root@slave1 "cat /DIR/file.txt"

有特殊限制的命令:

命令限制说明解决方案
cd无法改变远程 Shell 的当前目录(因为每次ssh都是独立的非交互式会话)使用&&连接命令,或使用cd后跟要执行的命令
你想做什么推荐做法
查看远程目录ssh host "ls -la /path"
进入远程目录后执行多个操作ssh host "cd /path && cmd1 && cmd2"
在远程创建目录ssh host "mkdir -p /path/dir"
在远程复制/移动文件ssh host "cp /src /dst"
在远程删除文件ssh host "rm /path/file"
需要交互式操作(多次cd直接ssh host登录进去操作

如:在slave1中需要多次cd,不如直接ssh host登入到slave1中去cd

[root@master /]# ssh root@slave1 Last login: Mon May 4 09:16:08 2026 from 192.168.128.1 [root@slave1 ~]#

例子:

[root@master ~]# ssh root@slave1 root@slave1's password: # 输入密码(如果没配免密) Last login: Mon May 4 10:30:15 2026 from master [root@slave1 ~]# # 注意:提示符变了,说明已经在 slave1 上

现在你已经在slave1上了,可以连续执行多个cd,目录状态会保持

[root@slave1 ~]# pwd /root [root@slave1 ~]# cd / [root@slave1 /]# pwd / [root@slave1 /]# cd DIR [root@slave1 DIR]# pwd /DIR [root@slave1 DIR]# ls file.txt [root@slave1 DIR]# cd .. [root@slave1 /]# pwd / [root@slave1 /]# exit # 退出登录 logout Connection to slave1 closed. [root@master ~]# # 回到 master

关键点

操作说明
ssh root@slave1登录到 slave1
执行任意命令(包括多次cd目录状态会一直保持
exitCtrl+D退出登录,回到 master

ssh host "command"的区别

方式特点适用场景
ssh host "command"执行单条命令后自动退出快速执行一条命令
ssh host登录进去,可以执行多条命令,状态保持需要连续操作、多次 cd、调试排查

退出的方法

  • 输入exit回车

  • Ctrl + D

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 2:23:28

SAP顾问摸鱼指南:如何用LSMW把重复数据工作自动化,提升效率

SAP顾问的LSMW效率革命:从重复劳动到智能自动化 在SAP顾问的日常工作中,数据维护往往占据了大量时间——那些看似简单却永无止境的批量修改、字段更新和报表调整。每当业务部门发来一份包含上千条记录的Excel表格要求更新时,手动逐条处理不仅…

作者头像 李华
网站建设 2026/5/5 2:20:27

SPHINX视觉仿真平台:计算机视觉研究的革命性工具

1. 项目概述 SPHINX是一个专注于视觉感知与推理的合成环境平台,它为计算机视觉研究提供了高度可控的仿真测试平台。这个项目本质上构建了一个数字化的"沙盒世界",研究人员可以在其中自由设计各种视觉场景,测试算法在不同条件下的表…

作者头像 李华
网站建设 2026/5/5 2:18:25

用8MHz有源晶振DIY一个迷你FM电台:实测88MHz到104MHz都能收到

用8MHz有源晶振打造微型FM电台:从电路设计到音质优化的完整指南 在电子爱好者的世界里,没有什么比自己动手制作一个功能完整的设备更令人兴奋的了。想象一下,用几块钱的元件就能搭建一个可以覆盖整个房间的个人FM电台,这种成就感是…

作者头像 李华
网站建设 2026/5/5 2:16:51

告别命令行:在Node-RED Dashboard里可视化监控你的MQTT设备数据

告别命令行:在Node-RED Dashboard里可视化监控你的MQTT设备数据 当你的智能温室传感器每隔5秒上报一次温湿度数据,或是工厂里的PLC设备持续发送产线状态时,原始MQTT消息就像未经加工的矿石——虽然价值连城,但只有经过精炼才能展现…

作者头像 李华