== An interesting bit of ssh and sshd behavior We have a ssh keypair that's used to let an automated script have very limited access to a remote system. As usual, we set up a whole host of restrictions in the target account's ((authorized_keys)); we force a specific command, we only accept the key from the host we expect it from, and we specify the whole raft of no-* options, including _no-pty_. The command that gets forced for this particular keypair reads various things that it needs from standard input (ie, the script). Recently, we wound up doing plain '_ssh login@host_' as part of trying to debug a problem. My expectation was that this would behave just like the normal '_ssh login@host nominal-command_' (since the command was being forced on the remote end anyways). Instead, what happened was that the connection stalled, (apparently) doing nothing; you would type at it and nothing happened. In fact, nothing even appeared (your typing wasn't echoed). What turned out to be happening is this: ~~ssh doesn't notice if the remote end refuses to create a pty~~. Instead it carries on exactly as if it was talking to a pty, so it puts the local terminal into raw mode and then sends your untranslated input to the other end (character by character). And plain '_ssh login@host_' tries to do a login session, which asks for a pty, while the remote end refused to set up a pty and forced the command (instead of running any sort of shell). When this happens, you get no visible output from your typing because ssh leaves it up to the remote end to do that in pty mode. Also, you generally get no visible reaction to what you've entered because when you hit 'return', ssh sent the raw return (as a _\r_), instead of the cooked newline (_\n_) that the other end is looking for. So in our case, the remote command thought that we were just typing a really, really long single line of input that we hadn't finished yet. (Trivia: if you ever want to see if this is happening to you, type a Control-J; this sends _\n_ directly. This is also useful to know if your terminal winds up in raw mode because a program crashed.)