I've been a scrum master now for about 6 months. Having been involved in scrum previously as a product owner, as well as a developer, moving into this role has really opened my eyes to some of the more political and arguably awkward elements of trying to get rid of impediments.
Stay calm when others aren't
Something that I think is really key about being a scrum master, you have to be thick skinned. You have to not only push back, but when people whine at you and bring office politics into play, it's vital that you remember exactly what the end game is, to meet the sprint goal!
I should also point out, this doesn't mean ruling with an iron fist, as a scrum master, you still succeed with the team and fail with the team. You can tell when something isn't working and using an agile methodology shouldn't be a painful process, it should be motivating.
You are neither a manager, nor just a developer
It's quite an interesting position to be in as from my experience, it's not unrealistic to get your hands dirty in some code while being a scrum master. You have to be strong enough to fend people off from poaching your team members even if they're higher up the food chain to yourself. You aren't "in charge" of the team, but you do have a responsibility to push back on poachers.
Don't be afraid to say "no"
If your product owner is telling you to put 60 points into a sprint, when you know the velocity you've been hitting for the past 4 sprints has consistently been 40 points, don't be afraid to say "what you're asking is unattainable". It's much better to be honest early on and push back. Blindly saying yes, promising to the customer and then having to deal with the consequences later on isn't where anyone wants to be.
Make sure stand ups are to the point
This might be like telling grandma to suck eggs, but it's vital that stand ups really are short, sharp and to the point. There's nothing worse than listening to a stand up where everyone in the back of their mind is thinking "I wish s/he'd just get to the point!". This is a situation where you have to stick to your guns and if people get offended, they get offended. You have to tell the person, "we don't need to know any of the extra detail, we just need to know from a high level; what it is you're going to achieve today, did you achieve what you set out to do yesterday and importantly, do you have any impediments".
Keep things moving
Sometimes things in a sprint can get stale, tasks can get stuck in one condition, you need to keep them moving! As an example, If there's a task that's been coded for half a day but not released to testing, find out why. You never know, the CI server might be down, there might be a problem releasing, you need to get it out before it becomes an impediment. Keeping the task board fresh and a true representation of what's actually happening in your sprint can really boost morale if you know there's only a few tasks left and you're literally "sprinting" to the finish :)