55537
手元のマシンからリモートにプログラムをアップロードして、実行するシェルを作成しました。

```

    #/bin/sh
    scp prgoram 192.168.0.1:~ 
    ssh 192.168.0.1 "./program" 
    
```

しかし、これだとリモートサーバに二回接続するため、認証鍵のパスフレーズを二回入力しなくてはいけません。

これは手間なので、一回にしたいです。  
なにか方法はないでしょうか。

なお、ControlPersist で一定時間接続を維持しておくのは避けたいです。  
<https://rcmdnk.com/blog/2015/05/13/computer-remote/>
CC BY-SA 4.0
2019-06-05T02:04:45.610
55533
2019-06-05T10:11:30.853
14334
question
linux
ファイルのアップロード(scp)と、実行(ssh)を一回の接続で行いたい
そのプログラムファイルを cat + ssh コマンドでリモート側へコピーする方法が考えられます。

```

    $ cat program | ssh 192.168.0.1 'cat > program && chmod 0755 program && ./program'
    
```
CC BY-SA 4.0
2019-06-05T02:59:32.663
55537
2019-06-05T02:59:32.663
55533
answer
ssh-agent を使うと入力は1回で済みます。

```

    #!/bin/sh
    KEY=path/to/keyfile       # 秘密鍵
    eval `ssh-agent`          # ssh-agent を起動。
    ssh-add $KEY              # 秘密鍵をメモリ上に読み込む
    scp prgoram 192.168.0.1:~ 
    ssh 192.168.0.1 "./program" 
    kill $SSH_AGENT_PID       # SSHエージェントを終了。
    
```

もしくは expect で自動化する方法でも実現出来ると思います。
CC BY-SA 4.0
2019-06-05T10:11:30.853
55549
2019-06-05T10:11:30.853
5008
55533
answer