If you want to log the output of an SSH connection under macOS with pssh from Homebrew, the following error occurs:
line buffering (buffering=1) isn't supported in binary mode
In the pssh command this happens when you define the -o
option for output.
pssh -t 0 -p 10 -l root -h host.list -o logs 'command'
In order to log the output of the SSH session, we have to make a small adjustment to the Python psshlib.
Here is how to fix pssh session logging on macOS Ventura
Let’s open this file with an editor of your choice:
Note
The path may change for you, especially if you have a different version of pssh installed. Just adjust the path to your version number.
/opt/homebrew/Cellar/pssh/2.3.1_6/libexec/lib/python3.10/site-packages/psshlib/manager.py
Inside the file we search for buffering
. Then we change the code as follows.
buffering=1
needs to be changed to buffering=0
At the end of the if else statement, we add the following two lines:
dest.write(data)
dest.flush()
This code block should now look similar to the following code:
def run(self):
while True:
filename, data = self.queue.get()
if filename == self.ABORT:
return
if data == self.OPEN:
self.files[filename] = open(filename, 'wb', buffering=0)
psshutil.set_cloexec(self.files[filename])
else:
dest = self.files[filename]
if data == self.EOF:
dest.close()
else:
dest.write(data)
dest.flush()
Now we save the file and our changes. From now on pssh can log the output to a file without getting a buffering error message.
Please keep in mind that you may need to make this change again in case you apply a homebrew update on your Mac.