通过 ssh 会话执行 bash 别名 | Linux 中国
2018-01-22 00:00
1066 查看
我在远程主机上上设置过一个叫做 file_repl 的 bash 别名 。当我使用 ssh 命令登录远程主机后,可以很正常的使用这个别名。然而这个 bash 别名却无法通过 ssh 来运行-- Vivek Gite
本文导航◈ 如何用 ssh 客户端执行命令14%◈ 理解 bash shell 以及命令的类型27%◈ 在 Unix 系统上无法直接通过 ssh 客户端执行 bash 别名46%◈ 相关资料86%编译自 | https://www.cyberciti.biz/faq/use-bash-aliases-ssh-based-session/
作者 | Vivek Gite
译者 | lujun9972我在远程主机上上设置过一个叫做 file_repl 的 bash 别名 [1]。当我使用 ssh 命令登录远程主机后,可以很正常的使用这个别名。然而这个 bash 别名却无法通过 ssh 来运行,像这样:
$ ssh vivek@server1.cyberciti.biz file_repl
bash:file_repl:command not found
我要怎样做才能通过 ssh 命令运行 bash 别名呢?SSH 客户端 (ssh) 是一个登录远程服务器并在远程系统上执行 shell 命令的 Linux/Unix 命令。它被设计用来在两个非信任的机器上通过不安全的网络(比如互联网)提供安全的加密通讯。如何用 ssh 客户端执行命令通过 ssh 运行
free命令或 date 命令[2] 可以这样做:
$ ssh vivek@server1.cyberciti.biz date
结果为:
Tue Dec 26 09:02:50 UTC 2017
或者:
$ ssh vivek@server1.cyberciti.biz free -h
结果为:
total used free shared buff/cache available
Mem:2.0G 428M 138M 145M 1.4G 1.1G
Swap:0B 0B 0B
理解 bash shell 以及命令的类型bash shell[3] 共有下面几类命令:☉ 别名,比如
ll☉ 关键字,比如
if☉ 函数 (用户自定义函数,比如
genpasswd)☉ 内置命令,比如
pwd☉ 外部文件,比如
/bin/datetype 命令[4] 和 command 命令[5] 可以用来查看命令类型:
$ 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
在 Unix 系统上无法直接通过 ssh 客户端执行 bash 别名要解决这个问题可以用下面方法运行 ssh 命令:
$ ssh -t user@remote /bin/bash -ic 'your-alias-here'
$ ssh -t user@remote /bin/bash -ic 'file_repl'
ssh命令选项:◈
-t:强制分配伪终端。可以用来在远程机器上执行任意的[6] 基于屏幕的程序,有时这非常有用。当使用
-t时你可能会收到一个类似 “bash: cannot set terminal process group (-1): Inappropriate ioctl for device. bash: no job control in this shell .” 的错误。bash shell 的选项:◈
-i:运行交互 shell,这样 shell 才能运行 bash 别名。◈
-c:要执行的命令取之于第一个非选项参数的命令字符串。若在命令字符串后面还有其他参数,这些参数会作为位置参数传递给命令,参数从
$0开始。总之,要运行一个名叫
ll的 bash 别名,可以运行下面命令:
$ ssh -t vivek@server1.cyberciti.biz -ic 'll'
结果为:
Running bash aliases over ssh based session when using Unix or Linux ssh cli下面是我的一个 shell 脚本的例子:
#!/bin/bash
I="tags.deleted.410"
O="/tmp/https.www.cyberciti.biz.410.url.conf"
box="vivek@server1.cyberciti.biz"
[!-f "$I" ] && { echo "$I file not found。"; exit 10; }
>$O
cat "$I" | sort | uniq | while read -r u
do
uu="${u##https://www.cyberciti.biz}"
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.cyberciti.biz.410.url.conf nginx-container/etc/nginx/
ssh -t ${box} /bin/bash -ic 'push_config_job'
相关资料更多信息请输入下面命令查看 OpenSSH 客户端[7] 和 bash 的 man 帮助 [8]:
$ man ssh
$ man bash
$ help type
$ help command
via: https://www.cyberciti.biz/faq/use-bash-aliases-ssh-based-session/作者:Vivek Gite[10] 译者:lujun9972 校对:wxy本文由 LCTT 原创编译,Linux中国 荣誉推出LCTT 译者
lujun9972 ? ? ? ?共计翻译:75 篇贡献时间:55 天
推荐文章< 左右滑动查看相关文章 >
点击图片、输入文章 ID 或识别二维码直达
原文链接请访问“原文链接”获得可点击的文内链接、全尺寸原图和相关文章。
相关文章推荐
- 通过 ssh 会话执行 bash 别名
- 通过 ssh 会话执行 bash 别名
- 通过玩命令行游戏来测试你的 BASH 技能 | Linux 中国
- linux 下如何通过ssh到其他机器然后执行命令?
- bash 中 while读取文件并通过 ssh执行命令出现的问题及解决方法
- 纯Java通过SSH执行Linux命令的方法及代码
- Linux下通过EXPECT脚本自动执行ssh远程连接
- 纯Java通过SSH执行Linux命令的方法及代码
- Linux下通过EXPECT脚本自动执行ssh远程连接
- 使用python通过SSH登陆linux并操作
- Java实现ssh连接linux并执行shell命令
- 如何在 Linux 中轻松修正拼写错误的 Bash 命令 | Linux 中国
- linux下使用ssh远程执行命令批量导出数据库到本地
- Linux下通过SSH远程连接BAE
- linux使用别名快速执行命令
- 关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程
- Linux 数据库学习的准备工作---win通过ssh访问ubuntu
- Linux 通过cron定期执行 php文件
- Screen--通过ssh执行长时间任务利器
- sql语句批量处理,通过linux执行sql脚本