SSH経由で管理できる内蔵デバイス(Perle IOLAN +、イーサネットシリアルアダプタ)があります。場合によっては、このデバイスにログインしてコマンドを実行する必要があります。 SSHを介したログイン、インタラクティブシェルのインポート、コマンドの実行はすべてシームレスでうまく機能しました。
しかし、プロセスを自動化して定期的にログインして、このコマンドを実行するスクリプトを私のサーバーに入れたいと思います。 SSH経由でリモートでできるかテストしているのにできないようです。
私が実行したいコマンドはkill line *
私のサーバーからですssh user@device_host kill line *
。しかし、予想した結果は出ませんでした。試してみると、デバイスの対話型シェルでは正常に動作しますssh user@device_host uptime
が、出力は出ません。uptime
デバイスは完全に動作するオペレーティングシステムを実行しません。これは、いくつかの使用可能なコマンドのみを含む一種の組み込み* nixです。 SSHサーバーがリモートコマンドの実行を認識しないことが可能かどうか疑問に思います。確認する方法はありますか? Lite SSHサーバーにはこの機能が不足していることが多いですか?
対話型シェルを介さずにリモートでコマンドを実行する別の方法はありますか?
-vvを使用したsshの出力は次のとおりです。
$ssh -vv user@remote_host 稼働時間 OpenSSH_6.4、OpenSSL 1.0.1e-fips 2013年2月11日 debug1: 構成データの読み取り/etc/ssh/ssh_config debug1: /etc/ssh/ssh_config 行 51: * オプションの適用 デバッグ 2: ssh_connect: needpriv 0 debug1:Remote_host [remote_host]ポート22に接続します。 debug1:接続が確立されました。 debug1: ID ファイル /home/raven/.ssh/id_rsa type-1 debug1: ID ファイル /home/raven/.ssh/id_rsa-cert type-1 debug1: ID ファイル /home/raven/.ssh/id_dsa type-1 debug1: ID ファイル /home/raven/.ssh/id_dsa-cert type-1 debug1: ID ファイル /home/raven/.ssh/id_ecdsa type-1 debug1: ID ファイル /home/raven/.ssh/id_ecdsa-cert type-1 debug1:プロトコル2.0の互換モードを有効にします。 debug1: ローカルバージョン文字列 SSH-2.0-OpenSSH_6.4 debug1:リモートプロトコルバージョン2.0、リモートソフトウェアバージョンOpenSSH_5.9 debug1: 一致: OpenSSH_5.9 および OpenSSH_5* debug2: fd 3 O_NONBLOCK 設定 debug1:SSH2_MSG_KEXINITが送信されました。 debug1: SSH2_MSG_KEXINIT 受信 デバッグ 2: kex_parse_kexinit: ----切り捨て - 多くのkexinitメッセージ---- debug2: kex_parse_kexinit: first_kex_follows 0 debug2:kex_parse_kexinit:予約済み0 debug2:mac_setup:hmac-md5が見つかりました。 debug1: kex: サーバー->クライアント aes128-cbc hmac-md5 なし debug2:mac_setup:hmac-md5が見つかりました。 debug1: kex: クライアント->サーバー aes128-cbc hmac-md5 なし debug1: SSH2_MSG_KEX_ECDH_INIT を送信します。 debug1: SSH2_MSG_KEX_ECDH_REPLY 予想 debug1: サーバーホストキー: RSA 6c:4c:41:a3:d2:04:66:a1:e8:66:2d:35:4c:79:6a:98 debug1:ホスト「remote_host」が知られており、RSAホストキーと一致します。 debug1:/home/raven/.ssh/known_hosts:4でキーが見つかりました。 debug1: ssh_rsa_verify: 署名が正しい デバッグ 2: kex_derive_keys debug2: set_newkeys: モード 1 debug1:SSH2_MSG_NEWKEYSが送信されました。 debug1:SSH2_MSG_NEWKEYSが必要です。 debug2: set_newkeys: モード 0 debug1: SSH2_MSG_NEWKEYS 受信 debug1:サーバーはローミングを許可しません。 debug1:SSH2_MSG_SERVICE_REQUESTが送信されました。 debug2:service_accept:ssh-userauth debug1:SSH2_MSG_SERVICE_ACCEPTを受け取りました。 debug2: キー: /home/raven/.ssh/id_rsa ((nil)), debug2: キー: /home/raven/.ssh/id_dsa ((nil)), debug2: キー: /home/raven/.ssh/id_ecdsa ((nil)), debug1: 継続可能な認証: 公開鍵、パスワード、キーボード対話 debug1: 次の認証方法: publickey debug1:秘密鍵を試してみてください:/home/raven/.ssh/id_rsa debug1:秘密鍵を試してみてください:/home/raven/.ssh/id_dsa debug1:秘密鍵を試してみてください:/home/raven/.ssh/id_ecdsa debug2: パケットを送信しません。メソッドを無効にします。 debug1: 次の認証方法: キーボード対話 デバッグ 2: userauth_kbdint debug2:キーボードインタラクションパケットを送信し、応答を待っています。 デバッグ 2: input_userauth_info_req debug2: input_userauth_info_req: num_prompts 1 パスワード: デバッグ 2: input_userauth_info_req debug2: input_userauth_info_req: num_prompts 0 debug1:認証に成功しました(キーボード対話)。 Remote_host([remote_host]:22) に認証されました。 debug1: チャンネル 0: 新規 [クライアントセッション] debug2: チャンネル 0: 送信 debug1: リクエスト[Eメール保護] debug1:対話型セッションに入ります。 debug2: コールバックの開始 debug2: fd 3 TCP_NODELAY 設定 debug2: client_session2_setup: ID 0 debug1: 環境を送信します。 debug1: 転送環境 LANG = en_GB.UTF-8 debug2: チャネル 0: 環境確認要求 0 debug1:コマンドの送信:稼働時間 debug2: チャネル 0: 実行確認要求 1 debug2: コールバック完了 debug2:チャンネル0:オープンチェックrwindow 0 rmax 32768 debug2: チャネル 0: rcvd 調整 2097152 debug2: チャネル_input_status_confirm: タイプ 99 ID 0 debug2:チャンネル0で実行要求を受け入れる debug1: client_input_channel_req: チャネル 0 rtype 終了ステータス応答 0 debug1: client_input_channel_req: チャネル 0 rtype[Eメール保護]返信0 debug2: チャネル 0: rcvd eow debug2: チャネル 0: close_read debug2:チャンネル0:入力オン - >オフ debug2: チャネル 0: rcvd eof debug2:チャンネル0:出力オン - >ドレイン debug2: チャンネル 0: obuf 空 debug2: チャネル 0: close_write debug2:チャンネル0:出力ドレイン - >オフ debug2: チャネル 0: rcvd が閉じました。 debug2:チャンネル0:ほぼ死んでいます。 debug2: チャンネル 0: gc: ユーザーに通知 debug2: チャンネル 0: gc: ユーザー分離 debug2: チャネル 0: 閉じた送信 debug2:チャンネル0:機能しない debug2:チャンネル0:ガベージコレクション debug1:チャンネル0:アイドル:クライアントセッション、nchannels 1 送信済み:送信された2472バイト、受信された1816バイト、0.8秒 1秒あたりのバイト数:送信3032.4、受信2227.7 debug1:終了ステータス0
答え1
そのssh user@device_host kill line *
中の「*」は、サーバーに送信される前にローカルシェルによって解釈されます。次のようにコマンドを引用する必要があります。
ssh user@device_host 'kill line *'