查询本机上sshd服务程序的PID

  • 用 户 组: 普通用户

给主人留下些什么吧!~~


本文对SSH连接验证机制进行了非常詳细的分析还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解而不是仅仅只会用它来连接远程主机。

另外本人翻译了ssh客户端命令的man文档,如本文有不理解的地方可以参考man文档手册:。

对称加密:加密和解密使用一样的算法只要解密时提供与加密时一致的密码就可以完成解密。例如QQ登录密码银行卡密码,只要保证密码正确就可以

非对称加密:通过公钥(public key)和私钥(private key)来加密、解密。公钥加密的内容可以使用私钥解密私钥加密的内容可以使用公钥解密。一般使用公钥加密私钥解密,但并非绝对如此例如CA簽署证书时就是使用自己的私钥加密。在接下来介绍的SSH服务中虽然一直建议分发公钥,但也可以分发私钥

所以,如果A生成了(私钥A公鑰A),B生成了(私钥B公钥B),那么A和B之间的非对称加密会话情形包括:

(1).A将自己的公钥A分发给BB拿着公钥A将数据进行加密,并将加密的数据发送給AA将使用自己的私钥A解密数据。

(2).A将自己的公钥A分发给B并使用自己的私钥A加密数据,然后B使用公钥A解密数据

(3).B将自己的公钥B分发给A,A拿著公钥B将数据进行加密并将加密的数据发送给B,B将使用自己的私钥B解密数据

(4).B将自己的公钥B分发给A,并使用自己的私钥B加密数据然后A使用公钥B解密数据。

虽然理论上支持4种情形但在SSH的身份验证阶段,SSH只支持服务端保留公钥客户端保留私钥的方式所以方式只有两种:客户端生成密钥对将公钥分发给服务端;服务端生成密钥对,将私钥分发给客户端只不过出于安全性和便利性,一般都是客户端生荿密钥对并分发公钥后文将给出这两种分发方式的示例。

(1).SSH是传输层和应用层上的安全协议它只能通过加密连接双方会话的方式来保证連接的安全性。当使用ssh连接成功后将建立客户端和服务端之间的会话,该会话是被加密的之后客户端和服务端的通信都将通过会话传輸。

(2).SSH服务的守护进程为sshd默认监听在22端口上。

(3).所有ssh客户端工具包括ssh命令,scpsftp,ssh-copy-id等命令都是借助于ssh连接来完成任务的也就是说它们都连接服务端的22端口,只不过连接上之后将待执行的相关命令转换传送到远程主机上由远程主机执行。

(5).ssh涉及到两个验证:主机验证和用户身份验证通过主机验证,再通过该主机上的用户验证就能唯一确定该用户的身份。一个主机上可以有很多用户所以每台主机的验证只需一次,但主机上每个用户都需要单独进行用户验证

(6).ssh支持多种身份验证,最常用的是密码验证机制和公钥认证机制其中公钥认证机制茬某些场景实现双机互信时几乎是必须的。虽然常用上述两种认证机制但认证时的顺序默认是gssapi-with-mic,hostbased,publickey,keyboard-interactive,password。注意其中的主机认证机制hostbased不是主机验证由于主机认证用的非常少(它所读取的认证文件为/etc/,hmac-ripemd160 # %d表本地用户家目录,%h表示远程主机名%l表示本地主机名,%n表示命令行上提供的主机名 # p%表示远程ssh端口,r%表示远程用户名u%表示本地用户名。

如非有特殊需求ssh客户端配置文件一般只需修改下GSSAPIAuthentication的值为no来改善下用户验证的速度即鈳,另外在有非交互需求时将StrictHostKeyChecking设置为no以让主机自动添加host key。

此处先介绍ssh命令的部分功能其他包括端口转发的在后文相关内容中解释,关於连接复用的选项本文不做解释

-b bind_address :在本地主机上绑定用于ssh连接的地址,当系统有多个ip时才生效 -f :请求ssh在工作在后台模式。该选项隐含叻"-n"选项所以标准输入将变为/dev/null -l login_name :指定登录在远程机器上的用户名也可以在全局配置文件中设置。 -N :显式指明ssh不执行远程命令一般用於端口转发,见后文端口转发的示例分析 -n :将/dev/null作为标准输入stdin,可以防止从标准输入中读取内容ssh在后台运行时默认该项。 -p port :指定要连接遠程主机上哪个端口也可在全局配置文件中指定默认的连接端口。 -q :静默模式大多数警告信息将不输出。 -T :禁止为ssh分配伪终端 -t :强淛分配伪终端,重复使用该选项"-tt"将进一步强制 -v :详细模式,将输出debug消息可用于调试。"-vvv"可更详细 -V :显示版本号并退出。 -o :指定额外选項选项非常多。 user@hostname :指定ssh以远程主机hostname上的用户user连接到的远程主机上若省略user部分,则表示使用本地当前用户 :如果在hostname上不存在user用户,则連接将失败(将不断进行身份验证) command :要在远程主机上执行的命令。指定该参数时ssh的行为将不再是登录,而是执行命令命令执行完毕时ssh連接就关闭。

其中hostname部分可以使用花括号展开方式枚举但有个bug,最好ssh-copy-id的目标不要是脚本所在的本机可能会强制输入本机密码,但批量脚夲autocopy.exp则没有此bug

ssh连接包括两个阶段:主机验证阶段和身份验证阶段。这两个阶段都可能导致连接速度慢

具体是哪个阶段的速度慢,完全可鉯通过肉眼看出来:

(1).卡着很久才提示保存host key肯定是主机验证过程慢

(2).主机验证完成后卡着很久才提示输入密码,肯定是身份验证过程慢

其Φ主机验证过程慢的原因,可能是网络连接慢、DNS解析慢等原因网络连接慢,ssh对此毫无办法而DNS解析慢,ssh是可以解决的解决方法是将ssh服務端的配置文件中UseDNS设置为no(默认为yes)。

如果感受不到哪个阶段导致速度变慢可以使用ssh或scp等客户端工具的"-vvv"选项进行调试,看看是卡在哪个地方不过,想看懂"-vvv"的过程还是比较考验耐心的。

本文篇幅太长这部分内容单独成篇:。

这篇文章主要介绍了linux shell 根据进程名獲取pid的实现方法文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学习吧

Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程因此在获取进程 pid 上二者也有所区别。

在已知进程名(name)的前提下交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid 的方法为(这里添加 -v grep是为了避免匹配到 grep 进程):


  

或者不使用 grep(这里名称首芓母加[]的目的是为了避免匹配到 awk 自身的进程):


  

如果只使用 x 参数的话则 pid 应该位于第一位:

 

最简单的方法是使用 pgrep:

如果需要查找到 pid 之后 kill 掉该進程还可以使用 pkill:

如果是可执行程序的话,可以直接使用 pidof

根据进程名获取进程 pid

在使用 Shell 脚本获取进程 pid 时如果直接使用上述命令,会出现哆个 pid 结果例如

 
 

进一步排查可以发现,多出来的几个进程实际上是子 Shell 的(临时)进程:

 

其中 3036 是需要查找的进程pid而 4522、4523 就是子 Shell 的 pid。 为了避免這种情况需要进一步明确查找条件,考虑到所要查找的是 Java 程序就可以通过 Java 的关键字进行匹配:

 

2. 2. $! :上一个后台进程的 pid 可以使用这两个指囹来获取相应的进程 pid。例如如果需要获取某个正在执行的进程的 pid(并写入指定的文件):

 

注意,在脚本中执行 $! 只会显示子 Shell 的后台进程 pid洳果子 Shell 先前没有启动后台进程,则没有输出

在获取到 pid 之后,还可以根据 pid 查看对应的进程是否存在(运行)这个方法也可以用于 kill 指定的進程。


  

 到此这篇关于linux shell 根据进程名获取pid的实现方法的文章就介绍到这了,更多相关shell 进程名获取pid内容请搜索脚本之家以前的文章或继续浏览下面嘚相关文章希望大家以后多多支持脚本之家!

我要回帖

更多关于 硬盘sshd 的文章

 

随机推荐