
你可以安装一个叫做 screen 的程序,该程序可以恢复你的 console ,然后再配合 bg 和 fg 来切换
关于 screen 的使用请百度,挺实用的一个程序。
关于 bg 和 fg 的说明如下:
CTRL+Z停止进程并放入后台
jobs 显示当前暂停的进程
bg %N 使第N个任务在后台运行(%前有空格)
fg %N 使第N个任务在前台运行(%前有空格)
默认bg 、fg 不带%N时表示对最后一个进程 *** 作
注意:
有些进程只能在前台运行,这时命令bg就不起作用了
要在Express应用程序中添加SSH转发,需要使用ssh2模块。以下是添加SSH转发的步骤:
1 安装ssh2模块
在终端中运行以下命令:
```
npm install ssh2
```
2 导入ssh2模块
在Express应用程序中导入ssh2模块:
```javascript
const ssh2 = require('ssh2');
```
3 创建SSH连接
使用ssh2模块创建SSH连接,并设置远程主机和端口:
```javascript
const conn = new ssh2Client();
connon('ready', function() {
consolelog('SSH连接已建立');
// 在此处添加转发代码
})connect({
host: '远程主机',
port: 22,
username: '用户名',
password: '密码'
});
```
4 添加转发
在SSH连接成功后,使用connforwardOut()方法添加转发:
```javascript
connforwardOut('本地主机', 0, '远程主机', 远程端口, function(err, stream) {
if (err) throw err;
// 在此处处理流
});
```
其中,本地主机和本地端口可以是任意值,远程主机和远程端口是需要转发的目标主机和端口。
5 处理流
在添加转发后,可以使用stream对象处理数据流。例如,将流传递给Express应用程序:
```javascript
appget('/ssh', function(req, res) {
connforwardOut('localhost', 0, '远程主机', 远程端口, function(err, stream) {
if (err) throw err;
streampipe(res);
});
});
```
这将创建一个路由,将来自SSH转发的流传递给Express应用程序的响应。
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。
SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。
传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:
第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。
第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。
SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。
如果只是想远程登陆别的机器只需要安装客户端(Ubuntu默认安装了客户端),如果要开放本机的SSH服务就需要安装服务器。
首先确认ssh-server是否已经启动了
如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:
停止和重启ssh服务的命令如下:
接下来就可以进行使用客户机远程登录服务器了~
口令登录非常简单,只需要一条命令,命令格式为: ssh 客户端用户名@服务器ip地址 eg:
如果需要 调用图形界面程序 可以使用 -X 选项
如果客户机的用户名和服务器的 用户名相同 ,登录时 可以省略 用户名。
还要说明的是,SSH服务的 默认端口是22 ,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:
客户机必须要知道服务器的 ip地址 。可以在服务器端电脑上利用 ifconfig 命令查看该机的ip地址:
如果是第一次登录远程主机,系统会给出下面提示:
意思是,该远程主机的真实性无法确定,其公钥指纹为 SHA256:s8pZiuKQr7k7f+57j22lk/IdWC8143VQKR+EabeP5,确定想要继续连接吗?
输入yes 即可。这时系统会提示远程主机被添加到已知主机列表。
然后会要求我们输入 远程主机的密码 ,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。
我们可以通过 Ctrl+D 或者 exit 命令 退出远程登录 。
每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。
1、在本机生成密钥对
使用ssh-keygen命令生成密钥对:
ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法
然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsapub。
2、将公钥复制到远程主机中
使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ ssh/authorized_key 文件中
ssh-copy-id ldz@19216801
经过以上两个步骤,以后再登录这个远程主机就不用再输入密码了。
1)已获取登录实例的管理员帐号及密码(或密钥)。
2)云服务器实例已开通22号端口。
—使用密码登录
Host Name(or IP address) :服务器的IP地址;
Port :服务器的端口,必须设置为22;
Connect type :选择 “SSH”;
Saved Sessions :填写会话名称,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,则后续使用时您可直接双击 “Saved Sessions” 下保存的会话名称即可登录服务器;
登录完成后,命令提示符左侧将显示当前登录云服务器的信息。
—使用密钥登录
Ps: 当不存在私钥文件时,可以选择Conversions > Import key 导入公钥(pem)文件来生成私钥文件(ppk)
Host Name (IP address) :服务器的IP;
Port :服务器的端口,必须填 22;
Connect type :选择 “SSH”;
Saved Sessions :填写会话名称,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,则后续使用时您可直接双击 “Saved Sessions” 下保存的会话名称即可登录服务器;
登录完成后,命令提示符左侧将显示当前登录服务器的信息。
一、sshd服务
sshd服务的配置文件一般保存在/etc/ssh/sshd_config文件中。
在RHEL7中,一般默认已经安装sshd服务程序,使用ssh命令进行远程连接。
格式:ssh [options] ip地址
ssh 192168106139
1、centos7使用ssh登录远程服务器
ssh xiaogua@192168106139
exit 退出登录
-r :用于传输文件夹
-6:使用IPv6协议
2)、从本地复制一个文件夹到远程主机
执行后会立即返回一个提示符
-S :创建会话窗口
-d:指定会话进行离线处理
-r:恢复指定会话
-x:一次性恢复所有的会话
-ls:显示当前已有的会话
-wipe:把目前无法使用的会话删除
2)、screen -ls
查看当前的会话正在工作中
1 在ssh shell中运行脚本,比如我运行一个批量下载脚本: python download-app-anniepy 2 按下ctrl-z中断脚本运行,此时系统提示: ^Z [1]+ Stopped python download-app-anniepy 意思是编号为1的任务挂起了
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 命令的输出重定向到终端,输出都将附加到当前目录的 nohupout 文件中。如果当前目录的 nohupout 文件不可写,输出重定向到 $HOME/nohupout 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:该命令返回下列出口值:
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。
该命令的一般形式为: nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohupout的文件中,除非另外指定了输出文件:(也就是说自定义输出的文件名)
nohup command > myoutfile 2>&1 &
在上面的例子中,输出被重定向到myoutfile文件中。
结合重定向知识:
为了不让一些执行信息输出到前台(控制台),我们还会加上刚才提到的>/dev/null 2>&1命令来丢弃所有的输出:
密钥交换未完成,连接已关闭。
验证程序回调不接受服务器主机密钥。
未知密钥类型rsa-sha2-512
办法:
1,从别的服务器登陆上要连接的服务器。把~/ssh/know_hosts 中与第一次连接服务器相关的认证删掉。 从重新做个认证。
2,或者在当前主机上,用一个别的用户,sshssh服务管理远程主机 登陆要连接的服务器。
使用Screen(虚拟终端管理器?)让它在后台管理终端界面,这样SSH断开后就不用怕正在进行的 *** 作中断了。
<h2> 一、安装:</h2>
<h2>二、使用:</h2>
<h4>1、创建一个虚拟终端:</h4>
登录树莓派,然后执行: screen -S XXX 这样就创建好一个名为XXX的终端了,然后就可以执行其它消耗时间比较长的工作,像运行服务器等。
<h4>2、保存一个终端</h4>
按ctrl+a后再按d这样就保存好一个虚拟终端了,系统会提示deatached,此时SSH就算是断开了,执行的命令 。
<h4>3、访问已经创建好的终端</h4>
screen -ls 可以列出已经创建的正在后台运行的终端
screen -r 终端名称 就可以打开终端了,比如 screen -r XXX
<h4>4、彻底退出</h4>
如果一个虚拟终端中的程序执行完毕了, screen -r 进入这个终端后再执行exit就完全退出了。
这样以后通过SSH编译内核之类的长时间工作时,再也不怕因为断网造成的 *** 作中断了。
以上就是关于Linux下,用ctrl+z将程序放到后台,断开ssh,再重连后,如何将程序再调回前台全部的内容,包括:Linux下,用ctrl+z将程序放到后台,断开ssh,再重连后,如何将程序再调回前台、express转发添加ssh、SSH原理 and SSH远程登录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)