Hide

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again.

Delete that bloated snippets file you've been using and share your personal repository with the world. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.


If you have a new feature suggestion or find a bug, please get in touch via http://commandlinefu.uservoice.com/

Get involved!

You can sign-in using OpenID credentials, or register a traditional username and password.

First-time OpenID users will be automatically assigned a username which can be changed after signing in.

Hide

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for:

Hide

News

2011-03-12 - Confoo 2011 presentation
Slides are available from the commandlinefu presentation at Confoo 2011: http://presentations.codeinthehole.com/confoo2011/
2011-01-04 - Moderation now required for new commands
To try and put and end to the spamming, new commands require moderation before they will appear on the site.
2010-12-27 - Apologies for not banning the trolls sooner
Have been away from the interwebs over Christmas. Will be more vigilant henceforth.
2010-09-24 - OAuth and pagination problems fixed
Apologies for the delay in getting Twitter's OAuth supported. Annoying pagination gremlin also fixed.
Hide

Tags

Hide

Functions

Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id

Terminal - Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id
cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
2009-02-05 19:37:56
User: DEinspanjer
Functions: cat ssh
29
Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id

If you use Mac OS X or some other *nix variant that doesn't come with ssh-copy-id, this one-liner will allow you to add your public key to a remote machine so you can subsequently ssh to that machine without a password.

Alternatives

There are 3 alternatives - vote for the best!

Terminal - Alternatives
cat ~/.ssh/id_rsa.pub | ssh <REMOTE> "(cat > tmp.pubkey ; mkdir -p .ssh ; touch .ssh/authorized_keys ; sed -i.bak -e '/$(awk '{print $NF}' ~/.ssh/id_rsa.pub)/d' .ssh/authorized_keys; cat tmp.pubkey >> .ssh/authorized_keys; rm tmp.pubkey)"
2011-09-30 07:39:24
User: tamouse
Functions: cat ssh
Tags: ssh awk
4

This one is a bit more robust -- the remote machine may not have an .ssh directory, and it may not have an authorized_keys file, but if it does already, and you want to replace your ssh public key for some reason, this will work in that case as well, without duplicating the entry.

ssh <user>@<host> 'mkdir -m 700 ~/.ssh; echo ' $(< ~/.ssh/id_rsa.pub) ' >> ~/.ssh/authorized_keys ; chmod 600 ~/.ssh/authorized_keys'
2011-10-03 15:59:43
User: Halki
Functions: chmod echo ssh
Tags: ssh ksh
0

Creates the .ssh directory on the remote host with proper permissions, if it doesnt exist. Appends your public key to authorized_keys, and verifies it has proper permissions. (if it didnt exist it may have been created with undesireable permissions).

*Korn shell syntax, may or may not work with bash

cat .ssh/id_rsa.pub | ssh user@server "cat >>.ssh/authorized_keys2"

Know a better way?

If you can do better, submit your command here.

What others think

This can also be done with ssh-copy-id.

Comment by Burn 156 weeks and 1 day ago

modded down because it absolutely duplicates ssh-copy-id

ssh-copy-id user@host
Comment by markdrago 156 weeks and 1 day ago

I would use:

scp ~/.ssh/id_rsa.pub user@machine:.ssh/authorized_keys

Comment by pixel 156 weeks and 1 day ago

Yep, what's wrong with scp?

Comment by fzero 156 weeks and 1 day ago

pixel ... have you now not just overwritten the destination servers authorized_keys?

ssh-copy-id does it all for you and as safely as possible... give it a whirl

What have you got to loose? (apart from sanity, health, job, etc)

Comment by finkployd 156 weeks and 1 day ago

it's still good for a case when your host doesn't have ssh-copy-id program, like freebsd or macosX do

Comment by codesnik 156 weeks and 1 day ago

if you forget about ssh-copy-id, I like this version better which works even on a new machine:

cat ~/.ssh/id_rsa.pub | ssh machine 'mkdir .ssh ; cat >>.ssh/authorized_keys'

to test:

ssh machine id

If it asks for a password, it's not working. Sometimes a server will disable passwordless logins.

Comment by shavenwarthog 156 weeks and 1 day ago

ssh-copy-id fails if you have running sshd in other port than 22. This method work for this situation.

Comment by starchox 150 weeks and 3 days ago

a temp solution for the workaround with ssh-copy-id for sshd in other port

ssh-copy-id '-p 12345 user@machine'
Comment by starchox 150 weeks and 3 days ago

@pixel, @fzero scp would completely replace the authorized_keys file; cat >> appends.

Comment by mfisher911 147 weeks and 2 days ago

What about rsync?

Comment by hced 7 weeks ago

Your point of view

You must be signed in to comment.

Related sites and podcasts