zjking的几个思考写的很好啊忍不住想记下来,侵删
远程ssh用tar打包一个文件夹或者unrar解压一个大文件,即使加了&,退出ssh登录时解压进程中断。
ps:直接exit的话会提示 zsh: you have running jobs. ,强行退出会有 zsh: warning: 1 jobs SIGHUPed 提示。
直接转一段wiki
If the process receiving SIGHUP is a Unix shell, then as part of job control it will often intercept the signal and ensure that all stopped processes are continued before sending the signal to child processes (more precisely, process groups, represented internally by the shell as a "job"), which by default terminates them.
This can be circumvented in two ways. Firstly, the Single UNIX Specification describes a shell utility called nohup , which can be used as a wrapper to start a program and make it ignore SIGHUP by default . Secondly, child process groups can be " disowned " by invoking disown with the job id, which removes the process group from the shell's job table (so they will not be sent SIGHUP) , or (optionally) keeps them in the job table but prevents them from receiving SIGHUP on shell termination.
目前有以下几种解决方案:
用途:不挂断地运行命令。
语法:nohup Command [ Arg ... ] [ &]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 &( 表示“and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:该命令返回下列出口值:
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。
该命令的一般形式为: nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:(也就是说自定义输出的文件名)
nohup command >myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
结合重定向知识:
为了不让一些执行信息输出到前台(控制台),我们还会加上刚才提到的>/dev/null 2>&1命令来丢弃所有的输出:
ssh命令用法:ssh+加要执行的命令,需在SSH 2客户端上使用。\x0d\x0a1、SSH客户端版本查看。\x0d\x0a有时需确认SSH客户端及其相应的版本号。使用ssh -V命令可以得到版本号。注意,Linux一般自带的是OpenSSH: 下面例子即表明该系统正在使用OpenSSH:\x0d\x0a$ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003。\x0d\x0a下面的例子表明该系统正在使用SSH2:\x0d\x0a$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu。\x0d\x0a2、用SSH登录到远程主机。\x0d\x0a当第一次使用ssh登录远程主机时,会出现没有找到主机密钥的提示信息。输入"yes"后,系统会将远程主机的密钥加入到主目录下.ssh/hostkeys下,这样就可继续操作。\x0d\x0a3、调试SSH客户端会话。\x0d\x0a当ssh连接出现问题时,需通过查看调试信息来定位这些错误。使用v选项(注意:是小写的v),即可查看调试信息。\x0d\x0a4、用SSH退出符切换SSH会话。\x0d\x0a远程登陆到一台主机A,然后从A登陆到B,如希望在A上做操作,还得再开一个终端。\x0d\x0a当使用ssh从本机登录到远程主机时,希望切换到本地做一些操作,然后再重新回到远程主机。这时,不需中断ssh连接,只需按照如下步骤操作即可:\x0d\x0a当已经登录到了远程主机时,可能想要回到本地主机进行一些操作,然后又继续回到远程主机。\x0d\x0a(1)登入远程主机:\x0d\x0alocalhost$ ssh -l jsmith remotehost。\x0d\x0a(2)已连接远程主机:\x0d\x0aremotehost$。\x0d\x0a(3)要临时回到本地主机,输入退出符号:“~”与“Control-Z”组合。\x0d\x0a当输入“~”不会立即在屏幕上看到,按下并且按回车之后一起显示。如下,在远程主机中以此输入“~”remotehost$ ~^Z [1]+ Stopped ssh -l jsmith remotehost localhost$。\x0d\x0a(4)已经退回到本地主机,ssh远程客户端会话就在UNIX后台中运行,可向下面那样查看它:\x0d\x0alocalhost$ jobs [1]+ Stopped ssh -l jsmith remotehost。\x0d\x0a(5)可将后台运行的ssh会话进程切换到前台,重新回到远程主机,而无需输入密码:localhost$ fg %1 ssh -l jsmith remotehost remotehost$。\x0d\x0a5、用SSH退出字符会话,显示信息。\x0d\x0a要取得一些关于当前会话有用信息,可按以下方式完成。这只能在SSH 2客户端上使用。\x0d\x0a登录到远程服务器:localhost$ ssh -l jsmith remotehost。\x0d\x0a在远程服务器上,输入ssh退出字符~并输入s。会显示出很多有关当前ssh连接的有用信息。SSH 是 Linux 下进行远程连接的基本工具。一般情况下我们可以通过 ssh username@xxx.xxx.xxx.xxx 登录远程服务器,如果要管理多台服务器,这样太长了。
可以在家目录的 .ssh 中新建config文件,设置别名。
比如我有一台个人的云主机。IP是120.163.163.163,端口是4722(一般都是22,这里为了安全我改为了其他),登录用户名是ubuntu,登录方式是证书登录。
这样执行 ssh cloud 或 ssh alias 就无密码登录云主机了
ssh cloud "df -h"
ssh cloud "df -hps"
比如 sudo 开头的可能需要用户输入密码,需要 TTY。
添加 -t 参数后,ssh 会保持登录状态,直到你退出需要交互的命令。
再举个实际例子:
ssh -t flux sudo -u fueladminprd ssh 192.168.1.100
这句话实际执行了两步:
可以用单引号或双引号开头,然后写上几行命令,最后再用相同的引号来结束。
> 开头的就是输入下一行命令
如果需要在命令中使用引号,可以混合使用单双引号。
在远程服务器执行 ls node ,本地定义变量a,传入到命令中。达到一样的效果。
在下图的命令中为 bash 指定了 -c 参数
本地创建demo.sh,内容是: ls node
运行 ssh cloud <demo.sh
通过重定向 stdin,本地的脚本 demo.sh 在远程服务器上被执行。
修改 demo.sh 内容为:
执行 ssh cloud 'bash -s'<demo.sh aa bb cc
bash 就是 $0 第一个参数。
http://www.openssh.com/
https://www.cnblogs.com/sparkdev/p/6842805.html
https://www.zcfy.cc/article/top-20-openssh-server-best-security-practices
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)