zoukankan      html  css  js  c++  java
  • 你是真的了解ssh吗 说说你不知道的ssh

    Ssh命令——基石天赋

    主要参数说明:

    -l 指定登入用户
    -p 设置端口号
    -f 后台运行,并推荐加上 -n 参数
    -n 将标准输入重定向到 /dev/null,防止读取标准输入
    -N 不执行远程命令,只做端口转发
    -q 安静模式,忽略一切对话和错误提示
    -T 禁用伪终端配置

    主服务器登录从服务器(主:192.168.1.1 从:192.168.1.2)

    格式: Ssh root@192.168.1.2

    输入从服务器的root密码:

    这部执行后,就在从服务器里面了

    但是:

    Ssh root@192.168.1.2 “mkdir /media/cdrom”

    这种类似命令就不会到从服务器去,而是在从服务器执行了命令就返回回来了,有时候这种结果并不是我们的本意

    那么有意思的就来了:

    1:从服务器下有个脚本/root/shell.sh

    #!/bin/bash

    Echo wwwwwwwwwwwwwwwwwwweb

    那么执行ssh 192.168.1.2 “source /root/shell.sh”

    当然,没有多大问题,在从服务器上打印后返回到本机

    2:从服务器下有个脚本/root/shell.sh

    #!/bin/bash

    While:

    do

       Echo wwwwwwwwwwwwwwwwwwweb

    done

    那么执行ssh 192.168.1.2 “source /root/shell.sh &”(这个&是执行远程后台运行sh)

    问题就是主服务器上ssh输入密码后会一直卡主

    原因是因为shell.sh一直在运行,并没有任何返回,因此调用方一直处于等待状态。

    这时候需要先将从服务器上的shell.sh进程kill掉,ssh恢复

    娜莫解决问题的方法呢?下面给出两个方法解决

    方法一:为了解决等待过程,将标准输出与标准错误输出重定向到/dev/null,这样就不会卡主了。

    但这个ssh进程会一直运行在后台,浪费资源,当然,这个后台进程需要的话也是准备kill掉的

    方法二:

    kill掉这个ssh进程,但是在ssh执行后就kill掉ssh进程

    #!/bin/bash ssh -f -n 192.168.1.2 “source /root/shell.sh &” # 后台运行ssh

    pid=$(ps aux | grep "ssh –f -n 192.168.1.2 /root/shell.sh" | awk '{print $2}' | sort -n | head -n 1) # 获取进程号

    echo "ssh command is running, pid:${pid}"

    sleep 10 && kill ${pid} && echo "ssh command is complete"

    # 10秒后执行kill命令,关闭ssh进程

  • 相关阅读:
    MySQL分库分表环境下全局ID生成方案
    centos添加php及mysql环境变量
    shell中的常用通配符,字符类
    centos7 安装xinetd,telnet
    centos7 systemctl一些用法
    ps命令
    nginx与php-fpm通信的两种方式
    nginx常用功能
    MySQL安装
    MySql与MariaDB由来与历程
  • 原文地址:https://www.cnblogs.com/dxxblog/p/8302857.html
Copyright © 2011-2022 走看看