如何在基于 ssh 的会话中使用/运行 bash 别名
$ ssh vivek@server1.example.com file_repl
bash: file_repl: command not found
当我使用 ssh 命令时,如何运行 bash shell 别名?
SSH 客户端 (ssh) 是一个 Linux/Unix/macOS/*BSD 命令,用于登录远程服务器并在远程系统上执行 shell 命令。它旨在通过不安全的网络(例如 Internet)在两台不受信任的机器之间提供安全的加密通信。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 3 分钟 |
如何使用 Linux ssh 客户端运行或执行命令
要使用 ssh运行 free 命令或date 命令
$ ssh vivek@server1.example.com date
:
示例输出:
Tue Dec 26 09:02:50 UTC 2017
或
$ ssh vivek@server1.example.com free -h
示例输出:
total used free shared buff/cache available Mem: 2.0G 428M 138M 145M 1.4G 1.1G Swap: 0B 0B 0B
了解 bash 的 shall 和命令类型
bash shell 理解以下类型的命令:
- 别名,例如 ll
- 诸如 if 之类的关键字
- 函数(用户定义函数,例如 genpasswd)
- 内置如 pwd
- 诸如 /bin/date 之类的文件
type 命令或 command 命令可用于找出命令类型:
date 和 free 都是外部命令,file_repl 是 sudo -i /shared/takes/master.replication 的别名。不能简单地执行别名命令,例如 file_repl:
$ type -a date
date is /bin/date
$ type -a free
free is /usr/bin/free
$ command -V pwd
pwd is a shell builtin
$ type -a file_repl
is aliased to `sudo -i /shared/takes/master.replication'
$ ssh user@remote file_repl
如何使用 ssh 客户端运行 bash 别名
让我们看看在 Linux、macOS、*BSD 和类 Unix 系统下使用 ssh 命令运行 bash shell 别名的命令行语法。
Bash 别名无法在基于 Unix 的系统上的 ssh 客户端上运行或工作
要解决此问题,请按如下方式运行 ssh 命令:
其中 ssh 命令选项:
$ ssh -t user@remote /bin/bash -ic 'your-alias-here'
$ ssh -t user@remote /bin/bash -ic 'file_repl'
- -t:强制分配伪终端。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用。如果不将-t选项传递给 ssh,您将收到一条错误,内容为“ bash:无法设置终端进程组 (-1):设备的 ioctl 不合适。bash:此 shell 中没有作业控制。 ”
其中bash shell选项如下:
- -i:使 shell 具有交互性,以便它可以运行 bash 别名
- -c:命令从第一个非选项参数 command_string 中读取。如果 command_string 后面有参数,则它们将分配给位置参数,从 $0 开始。
简而言之,运行以下命令来运行名为 ll 的 bash 别名:
$ ssh -t vivek@server1.example.com /bin/bash -ic 'll'
使用 Unix 或 Linux ssh cli 时通过基于 ssh 的会话运行 bash 别名
#!/bin/bash I="tags.deleted.410" O="/tmp/https.www.example.com.410.url.conf" box="vivek@server1.example.com" [ ! -f "$I" ] && { echo "$I file not found."; exit 10; } >$O cat "$I" | sort | uniq | while read -r u do uu="${u##https://www.example.com}" echo "~^$uu 1;" >>"${O}" done echo "Config file created at ${O} and now updating remote nginx config file" scp "${O}" ${box}:/tmp/ ssh ${box} /usr/bin/lxc file push /tmp/https.www.example.com.410.url.conf nginx-container/etc/nginx/ ssh -t ${box} /bin/bash -ic 'push_config_job'
结论
您学习了如何使用 ssh 命令在远程计算机上运行命令和 bash shell 别名。有关更多信息,请通过键入以下命令 man 命令或 help 命令查看此处和此处的文档:
$ man ssh
$ man bash
$ help type
$ help command