linux脚本中自动回复ssh登陆密码

linux脚本中自动回复ssh登陆密码,第1张

在Linux脚本中自动回复ssh登陆密码可以通过在ssh-keygen命令下生成一个公钥、私钥对,并将公钥文件存放在服务器端,使得在客户端使用ssh-copy-id可以将客户端的私钥拷贝到服务器端,从而无需再输入密码即可进行ssh登陆。

 shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量、条件、算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多。但是有时候我们可能会需要实现和交互程序如ftp,telnet服务器等进行交互的功能,这时候我们需要用到shell的自动交互功能.最简单的例子就是创建用户,我创建100个用户,初始密码为123,那么要是挨着passwd username ,交互性输入密码,那不得疯掉,但是脚本里应该怎么写呢?将密码123,输入到passwd命令?本文收集了较常用交互方法,并进行了比较和总结。自动交互方法一:利用命令的自带参数,将标准输入作为手动输入的内容自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考Linux与UNIX SHELL编程指南 chapt 5.7):"command <<delimiter p="" 从标准输入中读入,直至遇到delimiter分界符。?重定向 *** 作符command <<delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, p="" shell就知道输入结束了。最常见的delimiter分界符是eof,当然完全可以自定为其他字符。对于需求1 要求的自动登陆ftp,并作系列 *** 作,则可以用这种方法进行自动交互。代码如下:[yjwan@test ~]$ ftp -i -n 192.168.21.46 <user dbftp dbftp101lsEOF下面是得到的结果:Connected to 192.168.21.46.220 developerjail FTP server (Version 6.00LS) ready.331 Password required for dbftp.230 User dbftp logged in.Remote system type is UNIX.Using binary mode to transfer files.229 Entering Extended Passive Mode (|||54281|)150 Opening ASCII mode data connection for '/bin/ls'.total 8847424-rw-r--r-- 1 dbftp www 9055318991 Aug 28 14:28 ewiz90.sql_2010-08-29226 Transfer complete.221 Goodbye.测试可以发现,如上代码使用帐号名dbftp,密码dbftp101成功登陆了ftp服务器,并进入目录,ls出当前目录的文件。注意事项:1 这里一定要加-i ,否则必定失败!!这里ftp用的-I 参数 结束了交互式输入,因此可以用文本的方式自动地输入用户密码以及 *** 作方式如果不用-I 参数,那么必定要求你手动输入密码的!!那么就达不到自动登陆的要求了你可以man ftp找到这个参数-i 关闭多文件传送中的交互式提示。请参考 prompt、mget、mput 和 mdelete 子命令,以取得多文件传送中的提示的描述。-n 防止在起始连接中的自动登录。否则, ftp 命令会搜索 $HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。请参考 user 子命令。2 举一反三:只要是要求输入密码的命令,一般都带有一个参数,允许你从标准输入,输入用户密码,以及 *** 作。其他常用的自动登陆命令的参数1) Passwd命令Linux下 Passwd有参数--stdinThis option is used to indicate that passwd should read the new password from standard input, which can be a pipe.所以linux下自动改变用户密码的办法就是Echo 密码 |passwd –stdin 用户名Freebsd没有以上参数 注意他的方法是echo passwd |pw mod user username -h 02)smbpasswd-sThis option causes smbpasswd to be silent (i.e. not issue prompts)and to read its old and new passwords from standard input, ratherthan from /dev/tty (like the passwd(1) program does). This optionis to aid people writing scripts to drive smbpasswd3)sudo在shell脚本中需要用root用的来执行指令:sudo 自动输入密码echo "password" | sudo -S netstat -tlnp-SThe -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.3 标准输入还可以用以下两种写法:可以将下面的内容写入到一个文本然后ftp -I –n ip <文本或者echo “..” |ftp –I –n ip都是可以的!因为他们都满足“有一个标准的输入”这个条件4 ssh的自动登陆没有这样的自动输入密码的参数一般都是使用公钥/私钥的方式自动登录这种文章满街都是,网上google一下ssh自动登陆就可以找到答案。或者用下面的办法。自动交互方法2:利用expect脚本自动登陆这个 expect基本属于一种编程了基本任何需要交互式登陆的场合,他都可以解决,是相当的牛逼。只要是第一种办法解决不了的,基本都可以用这种办法。


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

原文地址: http://outofmemory.cn/yw/8615355.html

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

发表评论

登录后才能评论

评论列表(0条)

保存