linux 退出命令输入密码,Linux expect 命令无需输入密码登陆

使用 expect 命令实现自动登录的脚本,网上有很多,可是没有一个清晰易懂,初学者大都是照抄、收藏,可是为什么要这么写却不知其然。

米扑博客用一个最短的例子说明脚本的原理。

脚本代码如下:

#!/usr/bin/expect

set timeout 30

spawn ssh -l username 192.168.1.1

expect "password:"

send "ispass\r"

interact

1. [#!/usr/bin/expect]

第一行告诉操作系统,脚本里的代码使用那一个shell来执行。

这里的expect其实和linux下的bash、windows下的cmd是一类东西。

注意:这一行需要在脚本的第一行,注释符井号#开头

2. [set timeout 30]

设置超时时间,计时单位是:秒

设置整个脚本的执行超时时间为 30秒

3. [spawn ssh -l username 192.168.1.1]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。

所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。

它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

4. [expect "password:"]

这里的expect也是expect的一个内部命令,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。

这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

5. [send "ispass\r"]

这里就是执行交互动作,与手工输入密码的动作等效。

温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。

6. [interact]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。

如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

#!/usr/bin/expect

# Change a login shell to bash

set user [lindex $argv 0]

spawn bash $user

expect "]:"

send "/bin/bash "

expect eof

exit

ssh或登陆linux主机不需要输入密码的几种方法

一、 本地登陆不用密码

passwd  -d  USER  // 删除用户密码,使其登陆无需密码,直接登陆,恢复需重新设定密码即可

补充:

passwd  -l  USER // 锁定用户,不让其登陆。

passwd  -u  USER // 解除锁定,让其登陆。

二、 ssh登陆不用密码

用SSH登录远程主机,每次都输入密码挺麻烦的,其实可以用密钥文件来登录:

1. 用ssh-keygen命令生成private/public密钥对,提示问题都用默认回答即可。

$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/mimvp/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/mimvp/.ssh/id_rsa.

Your public key has been saved in /home/mimvp/.ssh/id_rsa.pub.

2. 用ssh-copy-id命令把公钥复制到远程主机上,user就是你登录用的用户名

$ ssh-copy-id -i /root/.ssh/id_rsa user@remote_host

3. 验证一下吧

$ ssh user@remote_host echo "it works"

三、Expect的应用---scp/ssh登陆

例如:

三服务器A.B.C 假设A.C要互相访问需经过B,本实现A与C之间的互访。

A -B- C

A.B.C密码分别为:PWDA、PWDB、PWDC。操作主机为A。

1. 从A到C的自动SSH登陆

#!/usr/bin/expect -f

set timeout 30

spawn ssh root@B

expect "password:"

send "PWDB\r"

expect "]*"

send "ssh root@C\r"

expect "password:"

send "PWDC"

interact

2. 从A到C文件的SCP

#!/usr/bin/expect -f

set timeout 300

set file [lindex $argv 0]

spawn scp $file root@B:/root/

expect "password:"

send "PWDB\r"

expect "]*"

spawn ssh root@B

expect "password:"

send "PWDB\r"

expect "]*"

send "scp $file root@C:/root/\r"

expect "password:"

send "PWDC\r"

expect "]*"

exit

interact

3. 从C到A文件的SCP

#!/usr/bin/expect -f

set timeout 300

set file [lindex $argv 0]

spawn ssh root@B

expect "password:"

send "PWDB\r"

expect "]*"

send "scp root@C:/root/$file ./\r"

expect "password:"

send "PWDC\r"

expect "]*"

send "exit\r"

expect "]*"

spawn scp root@B:/root/$file ./

expect "password:"

send "PWDB\r"

interact

参考推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux自动输入密码可以通过以下几种方式实现: 1. 使用expect工具:expect是一个自动化工具,可以模拟用户的交互操作,包括输入密码。可以编写一个expect脚本,在其中指定需要输入密码命令密码,然后运行脚本即可。 2. 使用ssh密钥认证:可以在本地生成一对公私钥,将公钥上传到需要登录的远程服务器上,然后在本地使用ssh命令连接远程服务器时,就可以自动完成认证,无需输入密码。 3. 使用sudo免密码:可以在sudoers文件中配置免密码,即指定某个用户或组在执行sudo命令无需输入密码。具体配置方法可以参考sudoers文件的注释说明。 4. 使用gnome-keyring:gnome-keyring是一个密码管理工具,可以将密码保存在一个安全的地方,然后在需要输入密码的时候自动填充。可以在gnome桌面环境下使用该工具。 ### 回答2: 在Linux系统中,自动输入密码的需求可能会出现在一些自动化脚本或自动化工具中,这时候需要采用一些技巧来实现自动输入密码。 最常见的方法是使用SSH无密码登录来避免需要输入密码。SSH无密码登录需要在两台机器之间进行设置:将公钥添加到另一台机器的已授权密钥列表中,以便允许该用户在不使用密码的情况下进行远程登录。 除了SSH无密码登录方法,还有一些其他方法可以实现自动输入密码: 1.设置sudoers文件:将需要自动输入密码命令添加到sudoers文件中,同时指定免密码验证。这就意味着通过sudo命令执行时,不需要输入密码。 2.使用expect工具:expect是一个自动化交互式应用程序的工具集,它可以用于自动化地执行命令,并且可以在执行过程中与程序进行交互,实现自动输入密码的效果。 3.使用加密的配置文件:将需要用到密码的配置文件加密,然后在需要使用时,输入口令解密,以便访问配置文件中的信息。 无论采用什么方式,自动输入密码都需要注意安全性问题,应该采取适当的措施确保密码不会被泄露。例如,将密码存储在明文文本文件中是非常危险且不安全的。 ### 回答3: Linux系统是一个非常强大的操作系统,但是在使用过程中可能需要频繁输入密码,这对于用户来说可能会带来一些不便。为了解决这个问题,Linux系统提供了一些方法来实现自动输入密码的功能。 一、使用SSH公钥 SSH公钥是一种安全的验证方式,它可以允许用户在不输入密码的情况下访问SSH服务器。SSH公钥是使用RSA或DSA算法生成的一对密钥,一把是公钥,一把是私钥。在使用SSH公钥进行验证时,用户将其公钥添加到服务器的authorized_keys文件中,当用户访问服务器时,服务器会自动识别该公钥并允许用户访问,无需输入密码。 二、使用sshpass工具 sshpass是一个命令行工具,可以在不需要交互式输入密码的情况下,从命令输入密码。它可以将密码通过命令行参数的形式传递给ssh命令,从而实现自动化登录。 使用sshpass的语法为: sshpass -p <password> ssh <username>@<host> 其中,<password>表示你的密码,<username>表示你的用户名,<host>表示你要登录的主机名或IP地址。 三、使用expect脚本 expect是一种自动化工具,可以用来编写脚本,实现自动交互和处理。在使用expect脚本自动输入密码时,我们可以编写一个脚本来实现自动登录功能。脚本包括交互式输入用户名和密码,并通过expect命令进行自动化处理。 使用expect脚本的语法为: #!/usr/bin/expect spawn ssh <username>@<host> expect "password:" send "<password>\r" interact 其中,<username>表示你的用户名,<host>表示你要登录的主机名或IP地址,<password>表示你的密码。 总之,在Linux系统中实现自动输入密码的方法有很多,不同的方法适合不同的场景,用户可以根据自己的需要选择最合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值