В городе имеется пять действующих пассажирских железнодорожных вокзалов:
Балтийский вокзал (обслуживает поезда на станции Кингисепп и Ивангород; пригородный пассажиропоток на Петергоф, Ораниенбаум, Сосновый Бор, Гатчину, Лугу)
Витебский вокзал (поезда дальнего следования на Калининград, города Украины, Белоруссии, стран Балтии; пригородные перевозки на Павловск, Оредеж, Вырицу, Гдов)
Ладожский вокзал (поезда дальнего следования на Мурманск, Вологду, Архангельск,Тюмень, города востока России, Хельсинки; пригородные перевозки на Будогощь, Волховстрой, Невдубстрой)
Московский вокзал (поезда дальнего следования на Москву, центр и юг России; пригородные перевозки на Кириши, Лодейное Поле, Волховстрой, Будогощь, Малую Вишеру, Бабаево, Великий Новгород)
Финляндский вокзал (обслуживает пригородный пассажиропоток на Сестрорецк, Выборг, Кузнечное, Приозерск, Ладожское Озеро и др., а также поезда на Хельсинки).
Ранее в городе также функционировал Варшавский вокзал. В 2001 году он был закрыт, поезда, отправляющиеся с него, переведены на другие вокзалы; на путях вокзала развёрнута экспозиция Музея железнодорожной техники, а в помещении вокзала теперь расположен крупный торговый центр.
C 1948 года в городе действует Детская железная дорога — Малая Октябрьская железная дорога. Транспортного значения она не имеет, используется как внешкольное учебное заведение для профориентации и приобщения подрастающего поколения к железнодорожному транспорту.