6

I'd like to print some string to all open terminals processes that are running in remote machine. currently I'm using ssh to connect the remote machine, and than I echo my string into wall command :

local> ssh [email protected]
(prompt to provide credentials)
remote> echo "123" | wall 

is there a way to do it all in one command that will run without user interactions ?

1 Answer 1

11

You will need to setup SSH key based authentication so that you do not need to enter a password.

  1. On the client machine, run the following to copy your current user's publickey to the server's authorized_hosts file:

    ssh-copy-id [email protected]
    <enter password>
    
  2. Make sure that you do not need to enter a password now:

    ssh [email protected] true
    
  3. Then simply append the command to the SSH command as following:

    ssh [email protected] 'echo asdf | wall'
    

You probably need to use the -tt flag with SSH, to ensure that you run the command in a TTY.

Note the single quotes ', they ensure that the pipe | does not get parsed by your local shell.

1
  • 9
    As an alternative to the single-quoted pipe approach, if you have working passwordless login, you could instead use something like echo asdf | ssh [email protected] wall. The difference is that in this form, the echo runs on the local system. Either way works in most cases, but running the command producing the message locally may allow for better error handling in some cases. Nov 28, 2022 at 2:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .