前提・実現したいこと
Windows上のVisual StudioでC#のプログラムを作成中です。
WindowsからRaspberry PiにSSH接続してコマンドを送りたいのですが上手くいきません。
どのようにプログラムを書けばいいのか教えていただいてもよろしいでしょうか?
発生している問題
Windows上からRaspberry Piに「echo Hello World」のようなコマンドは送れるですが
「cd /home/pi/momo-2021.3_raspberry-pi-os_armv7 && ./momo --use-sdl --show-me test」のようなコマンドを送れません。
C#のプログラムがフリーズしてしまいます。
両方ともRaspberry Pi上のターミナル上で直接打ち込んだら、問題なく動きます。
両者のコマンドの違いは言葉では上手く説明できませんが、下記のスクショの通りです。
現状のソースコード
【SSH】SSH接続をプログラムで実装
を参考にして下記のようなプログラムにしました。
SSH
1// ソリューションエクスプローラ>参照>NuGetパッケージの管理>「Neon.SSH.NET」を追加 2using Renci.SshNet; 3 4~ 省 略 ~ 5try 6{ 7 // コネクション情報 8 ConnectionInfo info = new ConnectionInfo( 9 mHostName, 10 Convert.ToInt32(mPortNumber), 11 mUserName, 12 new AuthenticationMethod[] { 13 new PasswordAuthenticationMethod(mUserName, mPassword) 14 } 15 ); 16 17 // SSHクライアントオブジェクトを生成し接続 18 SshClient ssh = new SshClient(info); 19 ssh.Connect(); 20 if (!ssh.IsConnected) 21 { 22 txtMsg("SSH接続に失敗しました",1); 23 return false; 24 } 25 26 // SSHコマンド実行 27 SshCommand cmd = ssh.CreateCommand(mCommandString); 28 messageOutput("$ " + mCommandString,0); 29 cmd.Execute(); 30 31 var stdOut = cmd.Result; 32 var stdErr = cmd.Error; 33 if (stdOut != string.Empty) 34 { 35 //コマンド実行結果を表示(デバック) 36 messageOutput(stdOut); 37 } 38 39 if (cmd.ExitStatus != 0 && stdErr != string.Empty) 40 { 41 // エラー出力を表示 42 txtMsg("SSHコマンドが失敗しました。",1); 43 return false; 44 } 45 46 // 接続終了 47 ssh.Disconnect(); 48 } 49catch (Exception ex) 50{ 51 MessageBox.Show(ex.ToString()); 52}
試したこと
プログラムのフリーズ箇所を調べたところ、下記の「cmd.Execute();」箇所でした。
補足情報
使用機器:
Raspberry Pi 4 Computer Model B
OS情報:
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
参考にした文献
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/15 02:26