SSH远程登录并执行命令
SSH是Linux中的远程连接管理工具,可以在本地服务器上通过SSH协议连接到远程服务器,并在远程服务器上执行命令
SSH不仅可以用来登录远程服务器,还能完成服务器远程操作,从而实现远程自动化
1、登录远程服务器
在Linux上,可以使用终端ssh
命令建立与远程服务器的SSH连接:
ssh username@remote_host
其中,username
是远程服务器的用户名,remote_host
是远程服务器的IP地址或域名
一旦建立连接,ssh
可以将指定的命令发送到远程主机,远程主机的ssh
服务会接收并执行该命令,然后将执行的结果返回给本地主机,最后本地主机的ssh
客户端将结果显示在本地终端上
2、远程执行命令
例如,需要查看一下远程主机的磁盘使用情况:
ssh username@remote_host "df -h"
如果需要执行多个命令,只需使用分号将多个命令分隔开:
ssh username@remote_host "pwd; free -h"
远程执行命令时,当前目录为登陆用户的家目录
3、远程执行交互命令
有时我们需要远程执行一些有交互操作的命令,例如:
ssh username@remote_host "top"
该命令会提示执行失败,原因是需要与用户交互(TTY)
默认情况下,当执行不带ssh
连接的命令时,系统会为用户分配一个TTY,以开启/运行一个Shell会话。但当通过ssh
在远程执行命令时,并不会为这个远程会话分配TTY
此时,可以通过添加-t
参数显式的告诉ssh
,我们需要一个伪终端(TTY)进行远程Shell 交互
ssh -t username@remote_host "top"
官方对-t
参数的解释如下:
强制伪终端分配,这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时,多个-t
选项强制TTY分配,即使ssh
没有本地TTY
4、远程执行脚本
1)执行远程服务器上的脚本
可以执行存放在远程服务器上的脚本:
ssh username@remote_host "/etluser/test/test.sh"
值得注意的是,此时需要指定脚本的绝对路径
当然,也可以为脚本传递参数:
ssh username@remote_host /etluser/test/test.sh hello
$0
和$1
分别对应/etluser/test/test.sh
和hello
2)执行本地脚本
可以在远程服务器上执行本地脚本:
ssh username@remote_host < ./test.sh
通过重定向stdin
,本地的脚本将在远程服务器上被执行
当然,也可以为脚本传递参数:
ssh username@remote_host 'bash -s' < ./test.sh hello
值得注意的是,想要为脚本传递参数,需要为bash
指定-s
参数
此时,$0
和$1
分别对应bash
和hello
5、退出远程SSH连接
正确退出远程SSH连接,可以确保服务器的安全性。常见的两种方法如下:
1)使用exit
命令
在远程服务器的命令行(终端)中输入如下命令:
exit
然后按回车键,这将关闭当前的SSH会话
2)使用组合键Ctrl+D
按下Ctrl
和D
键,这相当于发送了一个EOF(文件结束)信号,通常用于退出交互式会话