我对此感到愚蠢,但是我已经尝试了几件事,但我不确定要去哪里. 来自 $object->log_file("filename" | $filehandle | \&coderef | undef) 日志会话到文件.所有字符发送或从中收到 产卵过程写入文件. 我想将$ fileHandle传递给log_file.但是,当我尝试过时: open (LOG, ">>" .$opt{l}); my $sess = Expect->spawn("telnet $ip"); $sess->log_file(LOG) 我在正在运行脚本的目录中获取一个名为" log"的文件.经过一番调查,我尝试了此操作: open (LOG, ">>" .$opt{l}); my $sess = Expect->spawn("telnet $ip"); my $fh = *LOG; $sess->log_file($fh) 现在,我在目录中获得了一个名为*main::LOG的文件.
以下是关于 expect 的编程技术问答
我正在处理使用期望通过telnet登录到远程机器(Don)问,必须使用telnet).我还可以根据需要进行Perforce P4登录操作,并希望使用正确的密码进行管道.目前,我只是从清晰的文本环境变量中读取密码,即export PASSWORD=password,我知道这不是很好的安全. 为这些脚本存储密码的最佳方法是多个系统需要大量密码的脚本?以某种方式在文本文件中加密?还是其他? 请记住,我无法轻易更改现有系统,例如我无法真正安装SSH或类似的内容. 解决方案 可能是您最好的方法是将密码放入单独的文件中,并将该文件的安全性锁定下来,以便只有读取访问权限.不幸的是,如果您将加密密码存储在脚本中,则还必须存储解密方法,因此攻击者可以运行解密并恢复密码. 其他解决方案 之前有一个非常相似的问题,请参见/a>. 简而言之,一个人必须启动信任链.其他一切都是混淆的. 其他解决方案 如果您使用的是telnet,为什么要担心脚本中的密码?推定的攻击者会发现
我有一个perl脚本: #!/usr/bin/perl -w use DateTime; use Expect; use IO::Pty; use CGI::Fast; while($q = new CGI::Fast){ my $ip = $q->param('ip'); my $folder = $q->param('folder'); my $username = $q->param('username'); my $password = $q->param('password'); print "Content-type: text/html\r\n\r\n"; print "\nFastCGI\n\"; print "
$ip - $folder - $username - $password
"; my $ssh = new Expe
以下脚本" testssh.ksh"证明了当我们尝试同时从多台计算机执行SSH时,SSH存在一些问题 实际上,此脚本的目标是验证Solaris服务器中的文件test_file/var/tmp(10.10.18.6),如所有SSH步骤中所有人所见,我们无法验证 test_file的现有,因为SSH卡住或未从期望中激活 背景 - 此脚本同时使用IP -10.10.18.6执行15次SSH到Solaris服务器,以便在服务器中验证/var/tmp 中的file_test 我的问题 - 如何改进SSH过程以避免以下问题 备注 - 在这种情况下睡眠可以帮助我们 - 但我不想在SSH Process 之前添加睡眠 [root@linux /var/tmp]# more testssh.ksh #!/bin/ksh expect=`cat
我试图自动将某些文件从Linux服务器上传到启用FTP的Windows Server.我正在使用SFTP手动进行此操作,然后发出 put 命令.但是,当从Cron打来电话时,我的脚本不断停止以获取密码. 以下是我尝试使用的代码: #!/usr/bin/expect #!/bin/sh clear spawn sftp remoteuser@43.123.0.10 expect "password" send "world" expect eof 就目前而言,它每次都停止请求密码.为什么send "world"完成密码对话框? 更新: #!/usr/bin/expect #!/bin/sh clear spawn sftp remoteuser@43.123.0.10 expect "remoteuser@43.123.0.10's password:" send "world" expect eof 现在我收到以下错误: xml_reports.sh
我目前正在使用期望通过密码,以便我的脚本可以自动运行 很重要:请不要评论安全风险有多大或我应该如何使用SSH键,如果可以的话,我会使用这些,但是我必须使用的设置不允许. 我的代码看起来如下: #!/bin/sh PASS=mypassword /usr/bin/expect -c " spawn python Tools/python/install.py expect -nocase \"password:\" {send \"$PASS\r\"; interact} " 我遇到的问题是install.py提示相同的密码打了十二次,似乎只能自动填充第一个提示的密码. 是否有一种修改行为的方法,以便它全部填充密码,而不仅仅是第一次? 解决方案 您必须进行一些编程.幸运的是,答案很简单: #!/bin/sh PASS=MyPassword export PASS /usr/bin/expect -c ' spawn python Too
有几篇关于同一帖子的文章,但是我仍然无法使我的期望脚本正常工作.我的目的是使所有内容都自动化,但要为用户输入密码.因此,脚本有3个部分: 自动登录 让用户交互输入密码 将控制权回到期望继续工作 所以我有脚本,这些脚本将产生并具有3个读取命令.首先和最后一个应该被期望填补,第二个我想输入我的自我: #!/bin/ksh read user?User: echo "Expect entered the username $user" read pass?Password: echo "User entered the password $pass" read command?"Shell>" echo "Expect entered the command $command" 我的期望脚本: #!/usr/bin/expect spawn ./some_script expect User send I-am-expect\r expect Password
我正在自动化: 的过程 通过SSH连接到一个名为" Alpha"的系统,并带有密码" alpha"的用户名" alpha".连接后,我想设置root密码(" kickass").我连接到的系统默认情况下没有根密码.我写了这个期望的脚本可以完成这项工作,但是它不始终如一.它可以使用一次,然后如果我更改密码重新测试,则在发出" sudo passwd root"后等待" Enter New Unix密码:"提示.有什么想法吗? #!/usr/bin/expect -f set arg1 [lindex $argv 0] set force_conservative 1 ;# set to 1 to force conservative mode even if ;# script wasn't run conservatively originally if {$force_conservative} { set send_slow {1 .1}
是否可以自动将密码传递到SSH.我想通过使用公共密钥身份验证或期望脚本自动ssh到服务器,通过以某种方式让SSH从stdin或file读取密码. 必须这样做的原因是,我想使用RSYNC/SSH作为CRON作业将文件备份到服务器.该服务器在之后安装我的主目录它可以对我进行身份验证,因此使用公共密钥身份验证无效,因为〜/.ssh在登录成功之后才可用.期望(1)不可能解决问题,因为我想将其作为Cron工作运行,而且由于Cron Jobs并没有在终端下运行期望/SSH的组合无法正常工作.我无法访问该服务器,并且很难让管理员对那里的工作方式进行任何更改. 解决方案 使用sshpass. 例如,当密码在password.txt文件中时: sshpass -fpassword.txt ssh username@hostname (从答案中获取类似的问题) 其他解决方案 期望是不可能的,因为我想作为克朗的工作来运行它, 而且由于Cron Jobs不会在终端下运行
我有一个通过SSH连接到几个路由器的期望脚本.所有这些路由器都具有相同的密码(我知道这是错误的),并且脚本需要知道该密码才能连接到路由器.当前,该密码作为命令行上的参数传递给我的脚本,但这意味着我的.bash_history文件以及运行过程中都有该密码的迹象.因此,如果可能的话,我希望提示用户获取密码. 您是否知道是否有可能提示用户获取带有期望的密码? 谢谢. 编辑:如果我连接到服务器而不是路由器,我可能会使用SSH键代替密码.但是我正在使用的路由器只是支持密码. 解决方案 使用Expect的stty命令: # grab the password stty -echo send_user -- "Password for $user@$host: " expect_user -re "(.*)\n" send_user "\n" stty echo set pass $expect_out(1,string) #... later send -- "$p
谢谢. 但是需要帐户和密码.因此,我必须发送它们,然后发送OVS-VSCTL命令. 脚本是这样的: spawn telnet@ip expect -re "*login*" { send "root" } expect -re "password*" { send "****" } send "ovs-vsctl *******" 我想存储此命令send "ovs-vsctl ****"的输出,但是很多时候我得到了命令"发送"密码"的输出,我如何获得send "ovs-vsctl****"的输出.命令send "ovs-vsctl ***的输出是两个字符串,每个字符串占一行. 谢谢. 解决方案 也许: log_user 0 ;# turn off the usual output spawn telnet@ip expect -re "*login*" send "root
我试图从脚本中进行SSH-ADD(目前不在乎安全). 现在SSH提示了需要自动化的密码,因此我阅读了几件事-add-automation-without-password-prompt"> this 并找到现在我确实遵循: eval `ssh-agent -s` 脚本TMP.SH定义为: #!/usr/bin/expect spawn ssh-add /root/.ssh/id_rsa expect "Enter passphrase for /root/.ssh/id_rsa:" send "my_pass" interact ./tmp.sh ssh-add -l 如果ssh-add会奏效,则显示 之类的东西 4096 SHA256:wlfP/nhVSWXLcljBOen5GSYZXJGgfi/XJWfZeBwqRsM id_rsa (RSA) ,但我得到的The agent has no identities.似乎像ssh-agent
我不知道如何使用期望发送箭头键,因此我为所有箭头键生成了自动访问脚本,并发现自动访问为正确的箭头键生成了此字符: send -- "^[\[C" 我在自定义脚本中使用了相同的发送命令,我会收到以下错误: while executing "send -- "^[\[C" expect eof " (file "script_auto.exp" line 38) 我该怎么做才能发送正确的箭头键.任何帮助将不胜感激. 解决方案 "^[\[C"是Tcl中的无效字符串. ^[应该是ESC char,是\033.因此,请尝试以下操作: send "\033\[C" 更新: 获得当前终端的正确正确箭头键的最安全方法(如$TERM中)是使用tput: [bash] # v=$(tput cuf1) [bash] # printf '%q\n' "$v" $'\E[C' [bash] # 要知道cuf1的含义,搜索terminfo的人页面. :
如何获得telnet的java流与这是从期望的人页面的上下文: 期望是一个与其他互动程序"谈论"的程序 根据脚本. 跟进问题的范围更狭窄,范围更狭窄: 图书馆,如所有其他Java库,都使用标准Java 可以来自Telnet客户端,插座连接或 任何其他流源.这是一个telnet示例: github.com/alexey1gavrilov/expectit/blob/master/expectit-core/… - Alexey Gavrilov 这是示例代码: package net.sf.expectit; /* * #%L * ExpectIt * %% * Copyright (C) 2016 Alexey Gavrilov and contributors * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use th
我有一个期望编写的脚本可以执行登录操作.登录需要2FA代码,可以通过执行Shell命令2fa my_login获得此代码.现在,如何执行 2fa 命令并将其输出传递给脚本的发送? 我需要做send -- "$(2fa my_login)"之类的事情. $(2FA my_login)的输出应传递给发送. 我的脚本 #!/usr/bin/expect -f set timeout -1 spawn /home/local/apps/forticlientsslvpn/64bit/forticlientsslvpn_cli --server vpn.vpn-domain.com:10443 --vpnuser user-id expect "Password for VPN:" send -- "pass\n" expect "Enter the time-based OTP generated in your device." send -- "$(2fa my
我有一个像这样的期望脚本 #!/usr/bin/expect -f set timeout 30 log_user 0 set PASSWORD $::env(PASSWORD) set USERNAME $::env(USERNAME) set TOKEN $::env(TOKEN) puts stderr "Generating OTP" spawn oathtool --totp $TOKEN expect -re \\d+ set otp $expect_out(0,string) puts stderr "Connecting to VPN server" spawn -ignore HUP env openconnect -b https://vpn expect "GROUP:" send "Tech\n" expect "Username:" send "$USERNAME\n" expect "Password:" send "$PASSWORD\n" ex
我正在使用Ubuntu 14.04并安装了期望.我正在尝试编写一个脚本以输入密码. 更新的代码: #!/usr/bin/expect -d set timeout 20 set pw odroid spawn sudo apt-get update expect {\[sudo]\ password for odroid: } send "$pw\r" close 有什么建议吗? thx 更新错误: expect: does "" (spawn_id exp4) match glob pattern "\[sudo]\ password for odroid: "? no [sudo] password for odroid: expect: does "[sudo] password for odroid: " (spawn_id exp4) match glob pattern "\[sudo]\ password for