① ssh 远程执行awk命令并赋值到变量
换一个思路,ssh执行的时候只需要取回足够的信息就好了,至于过滤、做awk可以放在本地上执行,这样就可以避免$转义等麻烦的问题
例如
Mem=$([email protected]"free|grepMem"|awk'{print$2}')
② 如何通过SSH远程运行命令自动化
从客户端来看,SSH提供两种级别的安全验证。 第一种级别(基于口令的安全验证),只要你知道自己的帐号和口令,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,这种验证方式不能保证你正在连接的服务器就是你想连接的服务器。
③ 怎么通过ssh在远程Host执行交互命令
ssh执行远程操作
命令格式
复制代码 代码如下:
ssh -p $port $user@$p 'cmd'
$port : ssh连接端口号
$user: ssh连接用户名
$ip:ssh连接的ip地址
cmd:远程服务器需要执行的操作
准备工作
基于公私钥认证或者用户名密码认证能确保登录到远程local2服务器(有点基本运维知识的人做这个事情都不是问题)
cmd如果是脚本,注意绝对路径问题(相对路径在远程执行时就是坑)
不足
这个命令可以满足我们大多数的需求,但是通常运维部署很多东西的时候需要root权限,但是有几处限制:
远程服务器local2禁止root用户登录
在远程服务器脚本里转换身份用expect需要send密码,这样不够安全
ssh的-t参数
复制代码 代码如下:
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
中文翻译一下:就是可以提供一个远程服务器的虚拟tty终端,加上这个参数我们就可以在远程服务器的虚拟终端上输入自己的提权密码了,非常安全
命令格式
复制代码 代码如下:
ssh -t -p $port $user@$ip 'cmd'
示例脚本
复制代码 代码如下:
#!/bin/bash
#变量定义
ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3")
user="test1"
remote_cmd="/home/test/1.sh"
#本地通过ssh执行远程服务器的脚本
for ip in ${ip_array[*]}
do
if [ $ip = "192.168.1.1" ]; then
port="7777"
else
port="22"
fi
ssh -t -p $port $user@$ip "remote_cmd"
done
这个方法还是很方便的,-t虚拟出一个远程服务器的终端,在多台服务器同时部署时确实节约了不少时间啊!
④ 我已经登陆SSH程序了,请问这么使用SSH执行远程计算机的程序指令时是什么啊
指令就是你执行的shell命令
比如我要运行php
输入:
php test.php
就会执行
第一个php是执行程序的名称
⑤ ssh如何远程执行命令
ssh支持远程命令参数
可以类似方式嵌套:
alias pushbaby='cd /Users/xuqiang/Develop/work/tickets/baby/deploy;scp -r -v -i ~/.ssh/pedal/id_rsa baby.tar.gz baby.sql.txt [email protected]:/home/qiang.xu/tmp;ssh [email protected] -i ~/.ssh/pedal/id_rsa "source ~/.bash_profile;pushbaby";ssh [email protected] -i ~/.ssh/pedal/id_rsa "ssh [email protected] \"source ~/.bash_profile;pushbaby\""'更新要注意的是alias在非交互模式无法使用,需将替换成function
⑥ shell脚本中怎么ssh上远程机执行命令
先在两台机子上建立信任,ssh-key
具体方法网络下就有
脚本里的命令是
ssh 用户@ip
⑦ linux中ssh如何远程执行一条命令,而且不登录远程服务器
ssh [email protected] 'command ...'
scp [email protected]:/remote/path /local/path
scp /local/path [email protected]:/remote/path
- X forward
ssh -X [email protected]
xcommand ...
- Tunnel / Portforward
ssh -L 1234:remote.machine:4321 [email protected]
ssh -R 1234:local.machine:4321 [email protected]
ssh -L 1234:other.machine:4321 [email protected]
# vi /etc/ssh/sshd_config
PermitRootLogin no
# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
# service sshd restart
# su - user1
$ mkdir ~/.ssh 2>/dev/null
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
登入端:
$ ssh-keygen -t rsa
(按三下 enter 完成﹔不需设密码,除非您会用 ssh-agent 。)
$ scp ~/.ssh/id_rsa.pub [email protected]:id_rsa.pub
(若是 windows client, 可用 puttygen.exe 产生 public key,
然后复制到 server 端后修改之, 使其内容成为单一一行.)
回到 server 端:
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub
$ exit
# vi /etc/pam.d/su
auth required /lib/security/$ISA/pam_wheel.so use_uid
# visudo
%wheel ALL=(ALL) ALL
# gpasswd -a user1 wheel
# vi /etc/pam.d/sshd
auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users ōnerr=fail
# echo user1 >> /etc/ssh_users
⑧ ssh连接centos远程服务器运行指令的问题
总结下使用ssh远程执行命令需要注意点:
一般我们会使用ssh ip "执行命令"这种格式来执行远程是shell命令,但是如果是简单的一些操作还好,比如cd,rm,ls,mv等命令一般不会出问题
,但是如果你的脚本任务是,杀死多台机器上的hadoop或者elasticsearch进程,你会怎么做?
伦理片http://www.dotdy.com/
直接使用:
ssh h1 "kill -9 `jps | grep Elastic* | gawk '{print $1}' ` " 杀死es进程,你会发现,它竟然没有生效? 明明在本地执行
kill -9 `jps | grep Elastic* | gawk '{print $1}' `
这个命令是可以生效的,为啥,放到远程执行命令中就失效了呢?
其实原因很简单,就是因为没有转义造成的,包括awk变量名引用都需要转义,否则,你会发现,虽然能执行,但结果依旧是不准确的,注意linux中
单引号(所有命令均被当成普通字符处理)
双引号(可引用变量名)
反引号(可以执行linux脚本命令)的区别
看最终的正确的写法:
Java代码
ssh$host"es_pid=`jps|grepElasticsearch|gawk'{print$1}'`&&kill$es_pid"
⑨ ssh远程执行linux 命令是单引号还是双引号
单引号与双引号都可以,只是在本地的操作系统中,双引号内的环境变量(例如$HOME,$CC)等会被替换成系统变量的值,而单引号则不会。
例如
$ export LS=ls
$ ssh username@ip "$LS"
Desktop
Documents
Downloads
输出结果是在远端当前目录执行ls命令的输出结果
然而当我们使用单引号时候则不会得到任何输出,因为远端系统中根本没有$LS这个命令。
⑩ 请教如何在Bash里调用ssh远程执行命令
直接将所有可执行的各种命令写在 bash 的 SHELL 脚本文件中即可。当然了,至于说该 SHELL 脚本文件是否可以执行?并不是说只要你的SHELL脚本文件中的命令都是可执行的,就能够正确执行的。必须要使用命令:chmod +x my_shell.txt 将其修改成可执行权限,且 SHELL 脚本文件中的每一个命令都是拥有 x 权限(可执行权限)的,才能够在命令行状态 $ 下面正常执行。