如何在基于ssh的会话上使用/运行bash别名
时间:2020-01-09 10:44:02 来源:igfitidea点击:
我已经建立了一个名为file_repl的bash别名。
当我使用ssh命令登录时,它完全可以工作。
但是,我的bash别名未在ssh上运行,例如:$ssh [email protected] file_repl bash:file_repl:命令未找到
使用ssh命令时如何运行bash shell别名?
SSH客户端(ssh)是Linux/Unix/macOS/* BSD命令,用于登录到远程服务器并在远程系统上执行shell命令。
它旨在通过不安全的网络(例如Internet)在两个不受信任的机器之间提供安全的加密通信。
如何使用Linux ssh客户端运行或者执行命令
要使用ssh运行免费命令或者日期命令:
$ ssh [email protected] date
输出示例:
Tue Dec 26 09:02:50 UTC 2016
或者
$ ssh [email protected] free -h
输出示例:
total used free shared buff/cache available Mem: 2.0G 428M 138M 145M 1.4G 1.1G Swap: 0B 0B 0B
了解bash的命令和命令类型
bash shell可以理解以下类型的命令:
- 别名,例如ll
- 关键字,例如
- 函数(用户定义的函数,例如genpasswd)
- 内置如pwd
- /bin/date等文件
type命令或者command命令可用于查找命令类型:
$ 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'`
date和free都是外部命令,file_repl的别名为sudo -i /shared/takes/master.replication。
一个不能简单地执行诸如file_repl之类的别名命令:
$ ssh user@remote file_repl
如何使用ssh客户端运行bash别名
让我们看看在Linux,macOS,* BSD和类似Unix的系统上使用ssh命令运行bash shell别名的命令行语法。
Bash别名无法在基于Unix的系统上运行或者无法通过ssh客户端运行
要解决此问题,请按以下方式运行ssh命令:
$ ssh -t user@remote /bin/bash -ic 'your-alias-here' $ ssh -t user@remote /bin/bash -ic 'file_repl'
其中ssh命令选项:
- -t:强制伪终端分配。这可用于在远程计算机上执行任意基于屏幕的程序,这可能非常有用。如果没有将-t选项传递给ssh,您将得到一个错误,显示为bash:无法设置终端进程组(-1):设备的ioctl不适当。 bash:此shell中无作业控制。
其中bash shell选项如下:
-i
:使shell是交互式的,以便它可以运行bash别名- -c:从第一个非选项参数command_string中读取命令。如果在command_string之后有参数,则将它们分配给位置参数,从$0开始。
简而言之,运行以下命令来运行名为ll的bash别名:
$ ssh -t [email protected] /bin/bash -ic 'll'
会话示例:使用Unix或者Linux ssh cli时,在基于ssh的会话上运行bash别名
这是我的示例shell脚本:
#!/bin/bash I="tags.deleted.410" O="/tmp/https.www.theitroad.local.410.url.conf" box="[email protected]" [ ! -f "$I" ] && { echo "$I file not found."; exit 10; } >$O cat "$I" | sort | uniq | while read -r u do uu="${u##https://www.theitroad.local}" 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.theitroad.local.410.url.conf nginx-container/etc/nginx/ ssh -t ${box} /bin/bash -ic 'push_config_job'