SSH远程登录并执行命令

SSH远程登录并执行命令

SSH是Linux中的远程连接管理工具,可以在本地服务器上通过SSH协议连接到远程服务器,并在远程服务器上执行命令

SSH不仅可以用来登录远程服务器,还能完成服务器远程操作,从而实现远程自动化

1、登录远程服务器

在Linux上,可以使用终端ssh命令建立与远程服务器的SSH连接:

bash 复制代码
ssh username@remote_host

其中,username是远程服务器的用户名,remote_host是远程服务器的IP地址或域名

一旦建立连接,ssh可以将指定的命令发送到远程主机,远程主机的ssh服务会接收并执行该命令,然后将执行的结果返回给本地主机,最后本地主机的ssh客户端将结果显示在本地终端上

2、远程执行命令

例如,需要查看一下远程主机的磁盘使用情况:

bash 复制代码
ssh username@remote_host "df -h"

如果需要执行多个命令,只需使用分号将多个命令分隔开:

bash 复制代码
ssh username@remote_host "pwd; free -h"

远程执行命令时,当前目录为登陆用户的家目录

3、远程执行交互命令

有时我们需要远程执行一些有交互操作的命令,例如:

bash 复制代码
ssh username@remote_host "top"

该命令会提示执行失败,原因是需要与用户交互(TTY)

默认情况下,当执行不带ssh连接的命令时,系统会为用户分配一个TTY,以开启/运行一个Shell会话。但当通过ssh在远程执行命令时,并不会为这个远程会话分配TTY

此时,可以通过添加-t参数显式的告诉ssh,我们需要一个伪终端(TTY)进行远程Shell 交互

bash 复制代码
ssh -t username@remote_host "top"

官方对-t参数的解释如下:

强制伪终端分配,这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时,多个-t选项强制TTY分配,即使ssh没有本地TTY

4、远程执行脚本

1)执行远程服务器上的脚本

可以执行存放在远程服务器上的脚本:

bash 复制代码
ssh username@remote_host "/etluser/test/test.sh"

值得注意的是,此时需要指定脚本的绝对路径

当然,也可以为脚本传递参数:

bash 复制代码
ssh username@remote_host /etluser/test/test.sh hello

$0和$1分别对应/etluser/test/test.sh和hello

2)执行本地脚本

可以在远程服务器上执行本地脚本:

bash 复制代码
ssh username@remote_host < ./test.sh

通过重定向stdin,本地的脚本将在远程服务器上被执行

当然,也可以为脚本传递参数:

bash 复制代码
ssh username@remote_host 'bash -s' < ./test.sh hello

值得注意的是,想要为脚本传递参数,需要为bash指定-s参数

此时,$0和$1分别对应bash和hello

5、退出远程SSH连接

正确退出远程SSH连接,可以确保服务器的安全性。常见的两种方法如下:

1)使用exit命令

在远程服务器的命令行(终端)中输入如下命令:

bash 复制代码
exit

然后按回车键,这将关闭当前的SSH会话

2)使用组合键Ctrl+D

按下Ctrl和D键,这相当于发送了一个EOF(文件结束)信号,通常用于退出交互式会话

参考文章:https://www.cnblogs.com/youngerger/p/9104144.html

相关推荐
Ruiery9 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧10 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery10 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
qetfw11 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁12 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
是真的小外套16 小时前
网络安全实战第7期:Hydra爆破SSH实战
安全·web安全·ssh
沫璃染墨16 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
AI_Lab0118 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by2099918 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
星恒随风18 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip