sshはカスタムシェルで動作しますが、sshを使用してコマンドを直接実行することはできません

Mahdi.B

ウェブサイトを検索しましたが、同様の問題と解決策を見つけることができませんでした。そこで、新しい質問をしました。いくつかの制限されたコマンドでカスタムシェルを構築しようとしています。出発点として、StephenBrennanが提供するこのカスタムシェルを使用しています3つの組み込みコマンド(cd、help、exit)があり、システムコマンドを実行することもできます。

私はこの行を編集しました/etc/passwd

root:x:0:0:root:/root:/mnt/n1/custom-shell

また、この行をに追加しました/etc/shells

/mnt/n1/custom-shell

これで、を使用してリモートホストに接続できssh、カスタムシェルが表示され、コマンドを入力できます。しかし、を使用してコマンドを直接実行することはできませんsshたとえば、を使用してリモートホストで「help」コマンドを実行しようとしてssh 192.168.32.1 helpも、何も起こりません。試してみたところssh -v 192.168.32.1 help、結果は以下のようになりました。にこだわるdebug1: Sending command: help

OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2006
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.32.1 [192.168.32.1] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/identity type -1
debug1: identity file /root/.ssh/id_rsa type 1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: loaded 3 keys
debug1: Remote protocol version 1.99, remote software version OpenSSH_4.3
debug1: match: OpenSSH_4.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '192.168.32.1' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:5
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug1: Offering public key: /root/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /root/.ssh/id_dsa
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: password
[email protected]'s password:
debug1: Authentication succeeded (password).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: help

その結果、を使用scp -v devel/bin/i2c [email protected]:/mnt/n1/してファイルをリモートホストにコピーできず、次の行にとどまります。

debug1: Sending command: scp -v -t /mnt/n1/

たくさん検索しましたが、答えが出ませんでした。どんな助けでもいただければ幸いです。

ケンスター

シェルを呼び出してコマンドを実行させる標準的な方法の1つは、コマンドラインパラメーター-c実行するコマンドを使用してシェルプログラムを呼び出すことです。これは、OpenSSHSSHサーバーがクライアントから要求されたコマンドを呼び出すために使用する方法です。

SSHクライアントがOpenSSHサーバーに接続し、サーバーでコマンドの実行を要求すると、サーバーは次と同等の機能を呼び出すことになります。

$SHELL -c 'the-command'

ここ$SHELLで、はユーザーのデフォルトシェル、-cはリテラルコマンドラインオプション、the-commandはクライアントから要求されたコマンドです。コマンドは、単一のコマンドライン引数としてシェルに渡されます。

あなたの場合、シェルはカスタムシェルプログラムになります。「-c」とコマンド文字列を使用して実行されたという事実を取得するには、コマンドラインパラメータを解析する必要があります。次に、入力ストリームからコマンドを読み取る代わりに、コマンドラインで指定されたコマンドを実行する必要があります。

他のCプログラムと同様に、シェルプログラムへのエントリポイントは次のように呼ばれる関数mainです。

int main(int argc, char **argv)
{
    ...

あなたのシェルはこのやり方でSSHサーバから呼び出されたとき、あなたはそれを見つける必要がありますargcし、argvコマンドライン引数を反映します["/name/of-shell", "-c", "the-command"]getopt(3)コマンドライン引数の解析に役立つように呼び出すことができるような標準関数があります。

scpサーバーにシェルを介してプログラムを呼び出させることで機能することを追加します。したがって-c、scpセッション用に(実行するパラメーターとコマンドを使用して)カスタムシェルが呼び出されていることがわかりますサーバーの構成方法によっては、sftpセッションでもこれが表示される場合があります。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

シェルスクリプトはバックグラウンドでsshremote runコマンドを使用しますが、このsshプロセスを閉じることはできません。でも画面は全部完璧です

分類Dev

シェルコマンドをgradleで実行しますが、タスク内では実行しません

分類Dev

パスワードは知っていますが、sudoを使用してSUまたはコマンドを実行することはできません

分類Dev

SSHを使用せずにminikube内でコマンドを実行してからコマンドを実行することができます

分類Dev

FabricまたはBotoを使用してAWSインスタンスにSSHで接続し、シェルコマンドを実行する簡単な方法

分類Dev

システムは指定されたファイルを見つけることができませんが、コマンドラインで直接実行すると機能します

分類Dev

suを使用してwww-dataとしてコマンドを実行することはできません

分類Dev

コマンドが同期していません。現在、このコマンドを実行することはできません。PHPのWhileループ

分類Dev

シェルスクリプトを実行してJarを起動することはできません

分類Dev

シェルスクリプトからコマンドを実行することはできませんが、ターミナルに直接入力する場合は問題ありません

分類Dev

Mysql importコマンドは、cmdで実行しているときは機能しますが、引数を直接渡すときは機能しません

分類Dev

Windowsコマンドライン:パスの一部として変数を使用してコマンドを実行することはできません

分類Dev

echo $ HISTSIZEは、シェルスクリプトを介して実行すると印刷されませんが、コマンドラインで機能します

分類Dev

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

分類Dev

StackExchangeRedisを使用してRedisコマンドを実行することはできません

分類Dev

sh:1:Python経由でターミナルコマンドを実行するとプログラムが見つかりませんが、ターミナルにコマンドを直接入力すると問題なく動作します

分類Dev

SSHログインが成功したときに特権コマンドを実行する方法はありますか(必ずしもシェルまたはPTYを使用する必要はありません)?

分類Dev

「java」コマンドでjavaプログラムを直接実行することはできません

分類Dev

Javaクラスを使用してバッチファイルコマンドにアクセスして実行することはできません

分類Dev

カスタムセルでUISwitchを使用して新しいコントローラーに移動することはできません

分類Dev

私は、Pythonスクリプトを使用してJavaプログラムをコンパイルして実行することができません

分類Dev

Linuxの特定のCPUでプロセスを実行しますか?(コマンドラインを使用して指定することはできません)

分類Dev

SSHインスタンスが閉じた場合でも、sshで実行されているシェルスクリプトを実行し続けることはできますか?

分類Dev

「sudo-s <command>」はシェルでコマンドを実行しますが、ワイルドカードまたはメタ文字が機能しません

分類Dev

「sudo-s <command>」はシェルでコマンドを実行しますが、ワイルドカードまたはメタ文字が機能しません

分類Dev

SSH経由でマシンを再起動することはできません

分類Dev

ローカルで動作するTravisを使用してテストを実行するときに、「シンボルが見つかりません:_NSURLSessionTransferSizeUnknown」を修正するにはどうすればよいですか?

分類Dev

mysqli_multi_query-コマンドが同期していません。現在、このコマンドを実行することはできません

分類Dev

codeigniter:コマンドが同期していません。現在、このコマンドを実行することはできません

Related 関連記事

  1. 1

    シェルスクリプトはバックグラウンドでsshremote runコマンドを使用しますが、このsshプロセスを閉じることはできません。でも画面は全部完璧です

  2. 2

    シェルコマンドをgradleで実行しますが、タスク内では実行しません

  3. 3

    パスワードは知っていますが、sudoを使用してSUまたはコマンドを実行することはできません

  4. 4

    SSHを使用せずにminikube内でコマンドを実行してからコマンドを実行することができます

  5. 5

    FabricまたはBotoを使用してAWSインスタンスにSSHで接続し、シェルコマンドを実行する簡単な方法

  6. 6

    システムは指定されたファイルを見つけることができませんが、コマンドラインで直接実行すると機能します

  7. 7

    suを使用してwww-dataとしてコマンドを実行することはできません

  8. 8

    コマンドが同期していません。現在、このコマンドを実行することはできません。PHPのWhileループ

  9. 9

    シェルスクリプトを実行してJarを起動することはできません

  10. 10

    シェルスクリプトからコマンドを実行することはできませんが、ターミナルに直接入力する場合は問題ありません

  11. 11

    Mysql importコマンドは、cmdで実行しているときは機能しますが、引数を直接渡すときは機能しません

  12. 12

    Windowsコマンドライン:パスの一部として変数を使用してコマンドを実行することはできません

  13. 13

    echo $ HISTSIZEは、シェルスクリプトを介して実行すると印刷されませんが、コマンドラインで機能します

  14. 14

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

  15. 15

    StackExchangeRedisを使用してRedisコマンドを実行することはできません

  16. 16

    sh:1:Python経由でターミナルコマンドを実行するとプログラムが見つかりませんが、ターミナルにコマンドを直接入力すると問題なく動作します

  17. 17

    SSHログインが成功したときに特権コマンドを実行する方法はありますか(必ずしもシェルまたはPTYを使用する必要はありません)?

  18. 18

    「java」コマンドでjavaプログラムを直接実行することはできません

  19. 19

    Javaクラスを使用してバッチファイルコマンドにアクセスして実行することはできません

  20. 20

    カスタムセルでUISwitchを使用して新しいコントローラーに移動することはできません

  21. 21

    私は、Pythonスクリプトを使用してJavaプログラムをコンパイルして実行することができません

  22. 22

    Linuxの特定のCPUでプロセスを実行しますか?(コマンドラインを使用して指定することはできません)

  23. 23

    SSHインスタンスが閉じた場合でも、sshで実行されているシェルスクリプトを実行し続けることはできますか?

  24. 24

    「sudo-s <command>」はシェルでコマンドを実行しますが、ワイルドカードまたはメタ文字が機能しません

  25. 25

    「sudo-s <command>」はシェルでコマンドを実行しますが、ワイルドカードまたはメタ文字が機能しません

  26. 26

    SSH経由でマシンを再起動することはできません

  27. 27

    ローカルで動作するTravisを使用してテストを実行するときに、「シンボルが見つかりません:_NSURLSessionTransferSizeUnknown」を修正するにはどうすればよいですか?

  28. 28

    mysqli_multi_query-コマンドが同期していません。現在、このコマンドを実行することはできません

  29. 29

    codeigniter:コマンドが同期していません。現在、このコマンドを実行することはできません

ホットタグ

アーカイブ