shell实现SSH自动登陆

shell实现SSH自动登陆,第1张

[TOC]

注:需要执行权限,可通过 sudo chmod +x ./file_name.sh 添加

sh file_name.sh 就是指定了脚本解释器 /bin/sh 来解释执行脚本;常见的脚本解释器还有: /bin/bash 等,我们可以使用 ls -l /bin/*sh 命令来查看当前可用的脚本解释器;

这种方式不会像前两种方式一样fork一个子进程去执行脚本,而是使用当前shell环境执行。我们不必重启shell或者重新登录系统,就能使当前的更改生效。一般用于 .bashrc或者.bash_profile被修改的时候,

定义:我们写一个shell脚本时,总是习惯在最前面加上一行 #!/binbash ,它就是脚本的 shebang 。

作用:它指示了此脚本运行时的解释器,使用文件名直接执行shell脚本时,必须带上shebang。

使用:可以在shebang后面直接附加选项,执行时我们默认使用选项执行;

如 test.sh 的 shebang 为 #!/bin/sh -x ,那我们执行脚本时:

./test.sh hello 相当于: bin/sh -x ./test.sh hello

注意:在指定脚本解释器来执行脚本时,shebang会被指定的脚本解释器覆盖。

expect是一个能实现自动和交互式任务的解释器,它也能解释常见的shell语法命令,其特色在以下几个命令:

spawn command 命令会fork一个子进程去执行command命令,然后在此子进程中执行后面的命令;

它的一般用法为 expect "string" ,即期望获取到string字符串,可在在string字符串里使用 * 等通配符 string 与命令行返回的信息匹配后,expect会立刻向下执行脚本;

set timeout n 命令将expect命令的等待超时时间设置为n秒,在n秒内还没有获取到其期待的命令,expect 为false,脚本会继续向下执行;

一般用法为 send "string\r" , 向命令行输入一条信息, \r 表示输入回车;

创建脚本 touch aliyun_login_shell.sh ,内容如下:

执行 sudo chmod +x ./aliyun_login_shell.sh 命令给shell脚本添加执行权限;

运行 ./aliyun_login_shell.sh 命令,一键登陆成功!

优化一下:

脚本完成了,可是还是有些小瑕疵:

这里我们想到了linux的alias命令:

执行命令 vim ~./bash_profile ,在文件内部添加:

再使用 . ~./bash_profile 或 source ~./bash_profile

从此,我们无论在哪个目录,只要输入 alias_name 命令,回车,真正的一键登陆!

参考:

https://www.cnblogs.com/qiumingcheng/p/11544569.html

最近在编写脚本的时候发现一个问题,在执行 kubectl -n kube-system get pods 这个命令的时候,通过 ssh root@ip command 和 ssh root@ip command 登录后执行得到了不同的结果,

从上面可以看到SSH远程执行获取pods失败了,但是shell窗口执行却成功了,所以我们可以猜到两者之间一定有什么区别导致结果的不同。那么区别在哪里呢?通过研究发现两者的环境变量存在区别,通过执行printenv可以查看所有设置的环境变量:

通过上面可以看到SSH远程执行的时候是没有KUBECONFIG这个环境变量,而Shell窗口是有的,为什么有这个区别呢?这就要从Linux的bash的四种模式说起。

bash的四种模式:

从上面可以看出不同方式下加载的配置文件不同,那么怎么知道我们是加载了那些配置文件呢? 这里有一个验证的方法,就是在上面的每个配置文件中添加一句 echo $/etc/profile 这样的命令,把每个文件的路径打印出来。当配置文件被加载时,会输出相应的文件名,本例中在两个文件中加了该命令:/etc/pfoile, ~/.bashrc,然后使用不同SSH方式执行命令的结果如下。

只加载了.bashrc文件,未加载/etc/profile。

从输出可以看到两个配置都加载了,而KUBECONFIG只定义在/etc/profile中,没有定义在.bashrc文件中,所以通过 ssh root@ip command 执行时没有拿到KUBECONFIG这个环境变量从而导致报错。知道原因后我们就可以将KUBECONFIG环境变量添加到.bashrc文件即可。

SSH详解-1.ssh基础知识

SSH详解-2.ssh基本用法

SSH详解-3.密钥登陆

SSH详解-4.多个ssh公钥

OpenSSH 的客户端是二进制程序 ssh,Linux 系统一般都自带 ssh。新版的win10开启ssh服务,但不是很好用,可以使用一些好用的软件 Xshell 、 Putty 等

安装OpenSSH 以后,可以使用 -V 参数输出版本号,查看一下是否安装成功。

ubuntu

windows

ssh最常用的用途就是登录服务器,当然这需要服务器再运行着sshd。

ssh 登录服务器的命令如下,例如连接局域网内一台ip地址为192.168.1.98的主机

上面命令中,root是用户名,@后面的是主机名,它可以是域名,也可以是 IP 地址或局域网内部的主机名。

用户名也可以使用ssh的 -l 参数指定,这样的话,用户名和主机名就不用写在一起了。

ssh 默认连接服务器的22端口, -p 参数可以指定其他端口。

上面命令连接服务器192.168.1.98的8888端口,这里没有指定用户名。将使用客户端的当前用户名,作为远程服务器的登录用户名。

刚刚应该注意到这段话了,这段话是什么意思呢?

上面这段话的意思是192.168.1.98这个服务器的指纹是陌生的,是否要继续连接(输入 yes or no )。

接下来,输入 yes 后ssh会将当前服务器的指纹存储在本机 ~/.ssh/known_hosts 文件中。以后再连接的时候,就不会再出现警告了。

也就是说,ssh通过判断当前服务器公钥的指纹是否存在于~/.ssh/known_hosts文件中,来判断是否为陌生主机

然后,客户端就会跟服务器建立连接。

接着,ssh 要求用户输入所要登录账户的密码,用户输入密码验证成功后就可以使用远程shell了。

ssh(1) - OpenBSD manual pages


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7624685.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存