Net :: SSH :: Expectを使用してリモートマシンでコマンドを実行できません

luffy008

リモート接続を確立し、そのリモートマシンのユーザーアカウントのパスワード変更を自動化したかったので、Perl Net :: SSH :: Expectモジュールを使用しています。接続は確立されていますが、リモートマシンでコマンドを実行できません。私はPerl言語に慣れていないので、コードにいくつかの間違いがあるかもしれません。これを検索してみましたが、関連するものが見つかりませんでした。

最初は、Net :: OpenSSHとExpectモジュールを組み合わせて使用​​しようとしましたが、ユースケースを実現できませんでした。

#!/usr/bin/perl

use strict;
use warnings;
use Net::OpenSSH;
use Expect;

use Net::SSH::Expect;

my $uName= "user";

my $ssh = Net::SSH::Expect->new (
    host => "IPAddress",
    password=> "userPassword",
    user => $uName,
    raw_pty => 1
);

# logon to the SSH server using those credentials.
my $login_output = $ssh->login();
if ($login_output !~ /Welcome/) {
    die "Login has failed. Login output was $login_output";
}
#Random line display 
print "Connected to $uName\n";

#This is where I was trying the change password use case

$ssh->send("passwd") or die "Cannot execute the passwd command: $!\n";
$ssh->waitfor("Changing password for user.\n
(current) UNIX password: ", 3) or die "prompt 'password' not found after 1 second";
$ssh->send("oldPassword\n");
$ssh->waitfor("\n
Enter new UNIX password: " , 2) or die "prompt 'New password:' not found";
$ssh->send("newPassword");
$ssh->waitfor("\n
Retype new UNIX password: ", 1) or die "prompt 'Confirm new password:' not found";
$ssh->send("newPassword");

#$ssh->send("") or die "Cannot spawn: $!\n";
$ssh->close();

これは私が得ている出力です

Cannot execute the passwd command

新しいアップデート

コマンドが実行されているかどうかを確認するためだけに、簡単なコマンドを実行してみました。それでも、send(passwd)を使用したパスワード変更のユースケースはそうではありません。

#!/usr/bin/perl

use strict;
use warnings;
#use Net::OpenSSH;
#use Expect;

use Net::SSH::Expect;

#
# You can do SSH authentication with user-password or without it.
#
my $uName= "admin1";
# Making an ssh connection with user-password authentication
# 1) construct the object
my $ssh = Net::SSH::Expect->new (
    host => "192.168.56.101",
    password=> "Passw0rd1",
    user => "admin1",
    raw_pty => 1
);

# 2) logon to the SSH server using those credentials.
# test the login output to make sure we had success
my $login_output = $ssh->login();
if ($login_output !~ /Welcome/) {
    die "Login has failed. Login output was $login_output";
}
print "Connected to $uName\n";

これは私が実行しようとしている新しい単純なコマンドです

my $who = $ssh->exec("who");
print ($who);

send()からダイが削除された私の古いユースケース

$ssh->send("passwd");
$ssh->waitfor("Changing password for $uName.\n(current) UNIX password: ", 2) or die "prompt 'password' not found after 2 second";
$ssh->send("Passw0rd1\n");
$ssh->waitfor("\nEnter new UNIX password: " , 2) or die "prompt 'New password:' not found";
$ssh->send("qwerty123");
$ssh->waitfor("\nRetype new UNIX password: ", 1) or die "prompt 'Confirm new password:' not found";
$ssh->send("qwerty123");


$ssh->close();

これで、出力は次のようになります。

admin3@admin3-VirtualBox:~/Desktop$ perl NetSSHExpect.pl 
Connected to admin1
admin1   :0           2019-07-19 11:49 (:0)
admin1   pts/1        2019-07-19 12:41 (192.168.56.1)
admin1@admin1-VirtualBox:~$ prompt 'password' not found after 2 second at NetSSHExpect.pl line 36.
admin3@admin3-VirtualBox:~/Desktop$
HåkonHægland

ドキュメントによると

void send($ string)$string -SSHサーバーに送信し、何も返しません
。SSHサーバーに文字列を送信します。

したがって、戻り値を確認せずor die ..に、send():の後の部分を削除しください。

$ssh->send("passwd");   # <-- no error code is returned here..

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

SSH.NETがデバイスでコマンドを実行していません

'expect'コマンドを使用して、スクリプトを実行しているSSHにリモートでパスワードを渡します

SSHエージェント転送を使用してgitコマンドを実行できません

SSHを使用して一連のコマンドを実行できません

digi 6030dxモデムでSSH.NETを使用してコマンドを実行する-左角括弧で始まるこの文字シーケンスは何ですか?

sshを使用してコマンドをリモートで実行する

リモートsshコマンドで変数を使用できません

Runtime.Execを使用してリモートコマンド(ssh)を渡すことはできません

sshコマンドを実行し、リモートサーバー上のコマンドを強制終了できません

C#でSSH.NET CreateCommandを使用して実行すると、コマンドが「<command> notfound」で失敗する

SSH + Sudo + Bashスクリプトで期待:リモートマシンでsudoを使用してコマンドを実行します

sshを使用して、終了せずにリモートマシンでコマンドを実行するにはどうすればよいですか?

コマンドがc#のssh.netで完全に実行されていません

sshを使用して引数とシェルでリモートコマンドを実行する

sshを使用して引数とシェルでリモートコマンドを実行する

sshを介して名前でリモートコマンドを強制終了できません

jenkinsとSSHを介してリモートマシンでdockerコマンドを実行する方法は?

sshを介してリモートマシンでdockerコマンドを実行する

SSH.NETはシェル入力コマンドを処理しません

sshを介してコマンドを実行できません

sshを介してmpiexecコマンドを実行できません

sudoでコマンドを実行し、ssh .net c#でパスワードを入力する方法

SSH経由でリモートでsudoNOPASSWDコマンドを実行します

リモートsshコマンドを使用してリモートサーバー上にプログラムをビルドできません

ルートディレクトリで「chmod777。」を実行した後、リモートマシンにsshを実行できません

リモートマシンで変数を使用してsshおよびシェルスクリプトでコマンドを実行する

SSH.NETで長時間コマンドを実行し、結果をTextBoxに継続的に表示します

コマンドで複数の引数を渡して、C / C ++およびSSHを使用してリモートLinuxマシンでexeを実行する方法

コマンドラインのsshを介してリモートマシンでMySQLクエリを実行します

TOP 一覧

  1. 1

    Python / SciPyのピーク検出アルゴリズム

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  4. 4

    androidsoongビルドシステムによるネイティブコードカバレッジ

  5. 5

    ZScalerと証明書の問題により、Dockerを使用できません

  6. 6

    Reactでclsxを使用する方法

  7. 7

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  8. 8

    二次導関数を数値計算するときの大きな誤差

  9. 9

    Ansibleで複数行のシェルスクリプトを実行する方法

  10. 10

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  11. 11

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  12. 12

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  13. 13

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  14. 14

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  15. 15

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  16. 16

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  17. 17

    値間の一致を見つける最も簡単な方法は何ですか

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    Rパッケージ「AppliedPredictiveModeling」のインストール中にエラーが発生しました

  20. 20

    画像変更コードを実行してもボタンの画像が変更されない

  21. 21

    好き/愛の関係のためのデータベース設計

ホットタグ

アーカイブ